gpt4 book ai didi

Makefile:在构建任何目标之前创建文件

转载 作者:行者123 更新时间:2023-12-02 22:06:28 25 4
gpt4 key购买 nike

(我的问题与 Force Makefile to execute script before building targets 不同)

我有以下Makefile:

.PHONY: dump_params all

all: tmpA

tmpA: tmpB tmpC dump_params
cat $(filter tmp%,$^) > $@

tmpB: dump_params
touch $@

tmpC: dump_params
touch $@

dump_params:
echo "Makefile was run." >> config.txt

对于目标 dump_params,我想在每次调用新目标时创建/附加一个文件(以跟踪所使用工具的版本)。但是,当我打电话时

make tmpA

所有目标都是从头开始构建的

$ make tmpA
echo "Makefile was run " >> config.txt
touch tmpB
touch tmpC
cat tmpB tmpC > tmpA

$ make tmpA
echo "Makefile was run." >> config.txt
touch tmpB
touch tmpC
cat tmpB tmpC > tmpA

如何防止 Make 由于该目标“dump_params”而重新构建所有内容?还有另一种方法来创建这种日志文件吗?

编辑:我正在使用并行 make(选项 -j)。不能在语句部分定义宏来创建文件。

最佳答案

使用order-only prerequisites

.PHONY: dump_params all

all: tmpA

tmpA: tmpB tmpC | dump_params
cat $(filter tmp%,$^) > $@

tmpB: | dump_params
touch $@

tmpC: | dump_params
touch $@

dump_params:
echo "Makefile was run." >> config.txt

关于Makefile:在构建任何目标之前创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684479/

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