C++ Makefile中$(objs:%.o:%.cpp和$(objs:$(objs:.o=.cpp)之间的区别是什么

C++ Makefile中$(objs:%.o:%.cpp和$(objs:$(objs:.o=.cpp)之间的区别是什么,c++,makefile,compilation,C++,Makefile,Compilation,我在当前目录中添加了.c sub.c,并通过makefile编译它们 我做了以下工作: 方案1: objs=$patsubst%.cpp、%.o、$wildcard*.cpp $objs:%.o:%.cpp g++-o$@-c$makefile 1中的规则等效于 sub.o: sub.cpp g++ -o $@ -c $< add.o: add.cpp g++ -o $@ -c $< 这是正确的 makefile 2中的规则扩展为 sub.o add.o: sub

我在当前目录中添加了.c sub.c,并通过makefile编译它们

我做了以下工作:

方案1:

objs=$patsubst%.cpp、%.o、$wildcard*.cpp

$objs:%.o:%.cpp


g++-o$@-c$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 $<

也就是说,这两个目标都依赖于两个源文件。请注意,扩展到第一个先决条件,在本例中为sub.cpp。因此,这是规则使用的唯一源文件,即使在尝试构建add.o时也是如此。

是否有意在第二次编译sub.cpp时覆盖add.o,或者这是一个拼写错误。尤其是第一句和最后一句。@Matt。这个文件很有用!谢谢。