gpt4 book ai didi

c++ - Makefile 中 $(objs) : %. o : %. cpp 和 $(objs) : $(objs:. o=.cpp) 之间有什么区别

转载 作者:行者123 更新时间:2023-11-28 04:18:36 31 4
gpt4 key购买 nike

我在当前目录中有 add.c sub.c 并通过 makefile 编译它们。

我做了以下事情:

program 1:

objs=$(patsubst %.cpp, %.o, $(wildcard *.cpp))

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

g++ -o $@ -c $<

程序 2:

objs=$(patsubst %.cpp, %.o, $(wildcard *.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 $<

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

关于c++ - Makefile 中 $(objs) : %. o : %. cpp 和 $(objs) : $(objs:. o=.cpp) 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55988505/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com