如何用通配符编写Makefile规则?合并.vh生成规则遇阻求助
解决Makefile通配符规则生成.vh文件的问题
你的通配符规则失效主要有两个原因:一是命令里的%.h不会被自动替换为对应文件名,二是没把目标对应的.h文件加入依赖,导致Make找不到构建.h的规则。以下是两种可行的修复方案:
方案一:通配符规则配合.h依赖声明
.PHONY: phony_rule phony_rule: script2.pl perl script2.pl echo "Generation of file1.h and file2.h successful" # 声明所有匹配的.h文件都依赖phony_rule,确保先生成.h %.h: phony_rule # 通配符规则生成.vh,依赖script.pl和对应的.h文件 %.vh: script.pl %.h perl $< -in $*.h -out $@
- 用自动变量
$*指代通配符匹配的前缀(比如file1.vh对应的$*就是file1),替换命令里的%.h为$*.h,这样才能正确指向输入文件。 - 添加
%.h: phony_rule规则,告诉Make所有.h文件都需要先执行phony_rule生成,解决依赖缺失的问题。
方案二:静态模式规则(更明确可控)
如果你的.vh文件列表是固定的,用静态模式规则更清晰:
.PHONY: phony_rule phony_rule: script2.pl perl script2.pl echo "Generation of file1.h and file2.h successful" # 明确列出要生成的.vh文件 VH_FILES := file1.vh file2.vh # 静态模式规则,针对每个vh文件匹配对应的h文件 $(VH_FILES): %.vh: script.pl %.h perl $< -in $*.h -out $@ # 直接指定具体的.h文件依赖phony_rule file1.h file2.h: phony_rule
这种方式不需要依赖通配符匹配所有.h,只针对你需要的文件生效,避免意外匹配其他无关的.h文件。
另外注意:原规则里的.PHONY声明写错了,正确格式是.PHONY: phony_rule,之前的phony phony_rule是无效的。
内容的提问来源于stack exchange,提问作者justrajdeep
相关产品推荐
相关产品推荐

