You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:55:05