$(objs):%.o:%.cpp和$(objs):$(objs:.o = .cpp)之间的差异是什么

What is the diferrence between $(objs): %.o : %.cpp and $(objs): $(objs:.o=.cpp) in Makefile

本文关键字:objs cpp 是什么 之间      更新时间:2023-10-16

我在当前目录中有add.c sub.c,并通过makefile进行编译。

我做以下操作:

程序1:

objs = $(patsubst%.cpp,%.o,$(野卡 *.cpp((

$(objs(:%.o:%.cpp

g -o $@ -c $&&<

程序2:

objs = $(patsubst%.cpp,%.o,$(野卡 *.cpp((

$(objs(:$(objs:.o = .cpp(

g -o $@ -c $&&<

程序1成功编译。但是程序2获取以下命令:

g -o sub.o -c sub.cpp

g -o add.o -c sub.cpp

那么这两个程序之间有什么差异?

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

,这是该规则使用的唯一源文件