如何在Makefile中通过4位编号匹配完整TeX文件名并编译
解决Makefile匹配4位数字调用对应TeX文件的问题
核心思路
利用Makefile的模式规则和静态模式组合,先匹配4位数字的目标,再关联到实际存在的完整文件名,彻底规避循环引用问题。
具体实现
- 自动收集目标文件并生成可调用的简化目标:
# 扫描当前目录下所有符合格式的TeX文件 TEXFILES := $(wildcard Proj-JIRA-????-Internal.tex) # 从完整文件名中提取4位数字,生成如1234.tex的可调用目标 TARGETS := $(patsubst Proj-JIRA-%-Internal.tex,%.tex,$(TEXFILES))
- 用静态模式规则建立简化目标与原文件的关联:
# 针对每个简化目标,执行对应原文件的编译命令 $(TARGETS): %.tex: Proj-JIRA-%-Internal.tex texify --pdf --synctex=1 --clean $<
- 可选:添加兜底提示(处理不存在的数字)
如果输入的4位数字没有对应文件,给出明确提示,需将此规则放在静态模式之后(优先级更低):
# 未匹配到对应文件时的提示 %.tex: @echo "错误:未找到Proj-JIRA-$*-Internal.tex文件"
关键说明
wildcard函数会精准匹配Proj-JIRA-????-Internal.tex格式的文件(????对应任意4位数字)patsubst完成文件名的格式转换,把完整文件名映射成XXXX.tex的简化目标- 静态模式规则中
$<代表依赖的原文件,完全避免了之前的循环引用问题 - 兜底规则用于处理无效输入,提升使用体验
使用方式
直接执行 make 1234.tex,Make会自动找到Proj-JIRA-1234-Internal.tex并执行指定的texify编译命令。
内容的提问来源于stack exchange,提问作者Russell Urquhart C
相关产品推荐
相关产品推荐

