如何实现可选local.mk不存在时,修改Makefile仍触发重建?
解决方案
直接修改dummy.rebuild规则的依赖定义,用make的wildcard函数处理可选的local.mk文件,调整后的完整Makefile如下:
include config.mk -include local.mk -include dummy.rebuild all: ... # 其他目标... # 修复local.mk不存在时的自动重建逻辑 dummy.rebuild: Makefile config.mk $(wildcard local.mk) touch $@ $(MAKE) -s clean
原逻辑失效的原因
你之前的规则里直接把local.mk写进依赖列表,当这个文件不存在时,make会将它视为缺失的非可选依赖——虽然-include local.mk不会触发报错,但整个dummy.rebuild规则会被跳过,导致修改Makefile或config.mk时完全无法触发重建逻辑。
调整后的逻辑原理
$(wildcard local.mk)是make的内置函数,它的行为非常直白:
- 如果
local.mk存在,函数返回该文件名,依赖列表就会包含这个文件; - 如果
local.mk不存在,函数返回空字符串,依赖列表会自动忽略这个不存在的文件。
这样无论local.mk是否存在:
- 修改
Makefile或config.mk都会触发dummy.rebuild; - 当
local.mk存在时,修改它也会触发重建,完全匹配你的需求。
另外,原有的-include dummy.rebuild部分无需改动,它的作用是让make每次都检查该文件的依赖状态,确保依赖变更时重新执行规则。
内容的提问来源于stack exchange,提问作者BeeOnRope
相关产品推荐
相关产品推荐

