我在当前目录中有add.c sub.c,并通过makefile对其进行编译。
我执行以下操作:
程序1:
objs = $(patsubst%.cpp,%。o,$(通配符* .cpp))
$(objs):%.o:%。cpp
g ++ -o $ @ -c $ << / p>
程序2:
objs = $(patsubst%.cpp,%。o,$(通配符* .cpp))
$(objs):$(objs:.o = .cpp)
g ++ -o $ @ -c $ << / p>
程序1编译成功。但是程序2获得以下命令:
g ++ -o sub.o -c sub.cpp
g ++ -o add.o -c sub.cpp
那么这两个程序之间有什么区别?
答案 0 :(得分:1)
makefile 1中的规则等效于
sub.o: sub.cpp
g++ -o $@ -c $<
add.o: add.cpp
g++ -o $@ -c $<
正常工作。
makefile 2中的规则扩展为
sub.o add.o: sub.cpp add.cpp
g++ -o $@ -c $<
其中说,这两个目标的每个 都取决于两个源文件。请注意,automatic variable $<
扩展到第一个前提条件,在本例中为sub.cpp
。因此,即使尝试构建add.o
,这也是该规则使用的唯一源文件。