gpt4 book ai didi

c - 如何删除makefile中的中间目标文件

转载 作者:行者123 更新时间:2023-11-30 17:09:35 35 4
gpt4 key购买 nike

我想知道如何在以正确的方式构建库后强制 make 删除 .o 文件。

all: libtest.a

libtest.a: foo.o bar.o
ar r $@ $?

%.o : %.c
gcc -o $@ -c $<

将 .o 文件标记为 .INTERMEDIATE 的问题是,即使一个源文件发生更改,所有 .o 文件都会被重新编译,即使它们已经存在于存档中。有没有办法实现这一点。删除目标文件,不要重新编译未更改的源文件来更新库。

最佳答案

如果 foo.c 已更改,则 libtest.a 已过时,因此 Make 必须重建 foo.o,然后libtest.a。但 bar.o 也是 libtest.a 的先决条件,因此 Make 在 bar.o 之前无法执行 libtest.a 规则 存在,因此它也会重建 bar.o

(据我所知)最好的解决方案是将库视为一组独立的目标:

.PHONY: all
all: libtest.a(foo.o bar.o)

libtest.a(%.o): %.o
ar r libtest.a $^

(Make 可以通过这种方式处理存档成员,但即使不能,我们仍然可以对一些虚假目标使用这种方法。)

关于c - 如何删除makefile中的中间目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33226252/

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