如何在GNU Make(最新版)中先执行特定规则再运行通配符规则生成文件?
在特定规则执行后触发Makefile通配符规则生成目标文件
当你已经定义了foo.bar的专属准备规则,又想让通用的%.bar模式规则参与生成foo.bar,可以用以下两种常用方法:
方法一:使用多目标规则(::)
Makefile中用::定义同一目标的多个规则时,所有规则都会按顺序执行,不受目标文件是否存在的影响。示例代码:
foo.bar:: # 执行foo.bar的专属准备操作 echo "Running preparation tasks for foo.bar" %.bar:: # 通用的.bar文件生成逻辑 echo "Generating $@ using pattern rule" touch $@
执行make foo.bar时,会先运行准备任务,再执行模式规则的生成命令。
方法二:将准备任务作为前置依赖
把foo.bar的准备逻辑抽成独立的依赖目标,让foo.bar依赖该目标,同时保留模式规则负责实际生成:
# 定义foo.bar的准备任务 prepare_foo: echo "Preparing foo.bar..." # 让foo.bar依赖准备任务,触发模式规则生成 foo.bar: prepare_foo %.bar: echo "Generating $@ via pattern rule" touch $@
构建foo.bar时,会先完成prepare_foo的准备工作,再执行%.bar的通用生成逻辑。
注意:如果原foo.bar规则包含了文件生成命令,Make会优先使用该特定规则而忽略模式规则。此时需要调整规则结构,要么让特定规则仅负责准备(不生成文件),要么采用多目标规则的方式让两个规则都执行。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

