基本上,我想让这段代码在文件Makefile可执行文件:
targ: file1.cpp
g++ file1.cpp -o file1
targ: file2.cpp
g++ file2.cpp -o file2
targ: file3.cpp
g++ file3.cpp -o file3
我知道我可以把它组合成这样:
targ: file1.cpp file2.cpp file3.cpp
g++ file1.cpp -o file1
g++ file2.cpp -o file2
g++ file3.cpp -o file3
但是我希望它只在相应的文件更新时运行相应的行。我该怎么做呢?提前谢谢。
在makefile规则中,您在:
左侧放置的任何内容都是运行以下命令的产物/结果。在你的例子中,你说targ
产品有三种不同的制造方法,这是令人困惑的,因为制造targ
的方法是模糊的。您可能想说的是,为了成功构建targ
,您需要创建三个可执行文件file1
、file2
和file3
,每个可执行文件都使用相应的.cpp
文件构建。
.o
文件,对于.o
文件,它将查找包括.cpp
在内的多个文件名替代。
所以基本上像这样的东西应该足够了:
CXX=g++
targ: file1 file2 file3
隐式配方使用变量,如CXX
来定义c++编译器,CPPFLAGS
来定义预处理器标志(-I
,-D
等),编译器和链接器标志CXXFLAGS
,LDFLAGS
以及要链接到LDLIBS
的库。
如果你不想依赖隐式规则,你可以创建一个模式配方并使用自动变量:
target: file1 file2 file3
%: %.cpp
g++ $^ -o $@
你必须建立正确的关系。
的例子:
targ: file1 file2 file3
file1: file1.cpp
g++ file1.cpp -o file1
file2: file2.cpp
g++ file2.cpp -o file2
file3: file3.cpp
g++ file3.cpp -o file3
说:
如果你想构建targ
(你也应该把它设为PHONY), make看到你将构建file1
、file2
和file3
。对于这个,你有明确的规则。这就是它!