【发布时间】:2022-12-10 11:36:12
【问题描述】:
这是一个更新的问题,一个问题的答案,即如何确保 Makefile 中的某个规则在所有其他规则之前运行。多年来我一直很高兴地使用Beta's answer to that question。
然而,最近,GNU Make 4.4 发布了。不幸的是,它似乎打破了这个把戏。
我正在使用的示例文件在这里:
all: foo
.PHONY: dummy
dummy:
echo "Generating"
-include dummy
foo:
echo "FOO"
使用 GNU Make 4.3,make 或 make all 的输出是:
echo "Generating"
Generating
echo "FOO"
FOO
使用 GNU Make 4.4 时,输出为:
echo "FOO"
FOO
有人已经想出办法让它再次工作了吗?或者确保首先运行特定规则的不同技巧?
我遇到的现实生活用例是:https://github.com/xoreos/xoreos-tools/blob/master/src/version/rules.mk,即我正在使用它读取 git 版本信息(如果可用)。它被放入一个文件中,但只有在发生实际更改时才会写入文件(这就是 `cmp 的用途),因此实际代码(和库,二进制文件......)只有在有一个实际的变化,而不是在每次调用时。
我已经尝试过:重写它以创建一个实际的 .h 包含文件,然后将其包含在内。不幸的是,当使用生成的文件作为依赖项时,在写入文件的规则运行之前检查文件是否已被触及。所以我不能只在它发生变化时用它来重建其余部分。
【问题讨论】:
标签: makefile build gnu-make gnu