makefile /脚本用于小程序

时间:2009-08-07 13:28:19

标签: c++ makefile

我必须经常编译小程序并运行它。因为每次为每个cpp文件编写编译命令 g++ -W -Wall file.cpp -o out都很繁琐,我编写了一个小脚本来编译。

这是我写的脚本

#!/bin/bash
g++ -W -Wall $1 -o $1.out

所以,如果我必须编译file.cpp,我会compile file.cpp ,它将为我创建file.cpp.out可执行文件。 并且,这样的file.cpp没有任何头文件或任何其他依赖项。

我知道如何为特定的file.cpp编写makefile(非常简单的情况)

file: file.cpp
    g++ -W -Wall file.cpp -o file

但如果我必须编译file2.cpp,我必须再次更改上面的makefile或写新的。所以,我想要做的是,当我发出make file.cpp命令时,它会生成可执行文件。当我给 make file2.cpp时,它会生成file2作为可执行文件,类似于其他cpp文件。

7 个答案:

答案 0 :(得分:5)

export CXXFLAGS="-W -Wall"
rm Makefile
make file1

制作合理的默认值。您不必编写makefile来使用make。

Make有一组通用规则,当没有特定规则时,它会自动应用。其中之一是使用带有来自环境变量CXXFLAGS的标志的C ++编译器从'file.cpp'中创建'文件'。这有点像你想要的......

答案 1 :(得分:4)

您可以拥有以下目标

.cpp:
        g++ -W -Wall $@.cpp -o $@

这会创建一个隐式规则,这意味着要生成文件x已存在的文件x.cpp,请执行以下操作。

当你有规则时,你可以从命令行执行此操作:

make file
make file2

答案 2 :(得分:3)

依赖于make的C ++默认规则,makefile只需要

CPPFLAGS ?= -W -Wall

然后在命令行:

make file1
make file2
rm file2
make file2 CPPFLAGS="-W -Wall -O3"
rm file2
make file2 CXXFLAGS="-O3"   # possibly a bit too cunning, this one
                            # It has the same effect as the one with CPPFLAGS

就个人而言,我会添加到makefile

EXECUTABLES = file1 file2

all: $(EXECUTABLES)

clean: 
    rm -f $(EXECUTABLES)

答案 3 :(得分:1)

%: %.cpp
    g++ -W -Wall $*.cpp -o $*

答案 4 :(得分:1)

只需使用以下行创建一个Makefile

CXXFLAGS=-W -Wall

您现在可以拨打电话。

make foo

它会自动查找“foo.cpp”文件。

答案 5 :(得分:0)

Makefile不打算作为脚本工作;采取特定的投入来产生特定的产出。相反,它描述了文件之间的依赖关系,以及如何构建任何依赖关系,以便达到特定目标。

虽然可以通过创建名为“file1”的目标和名为“file2”的目标来执行您要求的操作,但这不是Makefile s背后的想法;如果这是你的要求,你可能会更好地使用shell脚本。

答案 6 :(得分:0)

您可以运行 make prog#来构建相应的程序。

CXX=/usr/bin/g++
CXXFLAGS=-W -Wall
TARGETS=prog1 prog2 prog3

all: $(TARGETS)

prog1: prog1.cpp
    $(CXX) $(CXXFLAGS) prog1.cpp -o prog1

prog2: prog2.cpp
    $(CXX) $(CXXFLAGS) prog2.cpp -o prog2

prog3: prog3.cpp
    $(CXX) $(CXXFLAGS) prog3.cpp -o prog3