cuốn sách gpt4 ai đã làm

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

In lại Tác giả: Walker 123 更新时间:2023-11-28 04:18:36 31 4
mua khóa gpt4 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

那么这两个程序有什么不同呢?

câu trả lời hay nhất

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 $<

也就是说,这两个目标中的mỗi 都依赖于两个 源文件。请注意 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
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress