Makefile中同一目标规则内复用%模式实现统一隐式规则的可行性探讨
关于Makefile模式规则替代的实现方案
可以实现!你写的这个模式规则本身就完全符合需求,不需要用到foreach/eval/call/define这类函数,也不需要为每个单词生成显式规则。
为什么这个规则能生效?
GNU Make的模式规则(也就是带%的隐式规则)天生支持这种多路径段的匹配逻辑:
- 当Make需要构建类似
prefix/FOO/FOO_suffix/FOO.txt的目标时,会自动将%匹配为FOO,同时对应到依赖路径中的%,也就是prefix/FOO/FOO_input.txt。 - 只要目标和依赖路径中的
%位置一一对应,Make就能准确识别出同一个匹配项,自动完成替换。
验证示例
假设你有prefix/FOO/FOO_input.txt文件,运行命令:
make prefix/FOO/FOO_suffix/FOO.txt
Make会:
- 匹配到你定义的模式规则,将
%替换为FOO; - 检查依赖
prefix/FOO/FOO_input.txt是否存在; - 执行规则中的
echo @*命令(如果你想和原规则一样只输出第一个依赖,可以把命令改成echo @<)。
同样的逻辑也适用于BAR或者其他符合该路径模式的单词,完全不需要额外配置。
内容的提问来源于stack exchange,提问作者GrAnd
相关产品推荐
相关产品推荐

