【发布时间】:2020-10-17 16:06:25
【问题描述】:
我有一个顶级 makefile,它是由我的自定义构建工具从各种配置文件中自动生成的:我希望 makefile 能够在过期时重新生成。为此,我有以下规则:
<absolute path to makefile>: <list> <of> <configuration> <files>
@echo "Rebuilding top-level makefile"
@<invoke my build tool>
我正在使用 GNU Make 4.3,它声称支持这一点,详细说明 here,它声称“在检查了所有 makefile 之后,如果有任何实际更改,make 从一个干净的状态开始并读取所有重新生成makefile。”
我遇到的问题是,虽然这个规则被正确调用(但 不是 隐含,我实际上需要另一个 PHONY 默认目标,它具有 makefile 作为 prerequesite),似乎 make 即使在 makefile 被更改后也不会重新加载它。我注意到,当 make 有配方并且过期时,make 确实会正确地重新加载 included makefile:只有这个顶级 makefile 有问题。
这样做的效果是文件中的其他规则已经过时了,变化只会在后续的make调用中体现出来。
我当前的解决方案是让 makefile 配方返回一个非零退出代码并回显一个警告,要求用户重新运行 make:我尝试使用 ($error _),但这并没有达到预期的效果。
似乎 GNU Make 声称支持这个用例,所以我想我一定是在这里做错了什么?
【问题讨论】:
-
你是否有机会在 Windows 上运行它?
-
@HolyBlackCat 不,拱门。我设法按照下面的答案修复了它:似乎 GNU Make 无法判断规则中生成文件的绝对路径实际上指向它自己加载的生成文件。