Makefile条件语句使用错误,如何实现双语简历编译?
Makefile编译双语简历的正确实现方式
一、错误原因分析
你原来的写法把Makefile的条件判断语法ifeq放在了规则的命令块(缩进部分)里,这部分是shell命令执行区域,Makefile会将ifeq当作shell命令去执行,自然无法正确解析。正确的条件判断应该放在全局非缩进的位置,用来赋值Makefile变量。
二、两种实现方案
方案1:命令行指定语言生成单份简历
通过命令行传入LANG参数,指定生成德语或英语简历,默认生成德语版本:
# 默认语言,可通过命令行覆盖(如 make LANG=EN) LANG ?= DE # 全局条件判断赋值目标文件路径 ifeq ($(LANG), DE) FILE = ./directory/resume_de else ifeq ($(LANG), EN) FILE = ./directory/resume_en else $(error LANG参数错误,请使用DE或EN) endif # 定义pdflatex命令,可按需替换 PDFLATEX ?= pdflatex # 默认目标:生成对应语言PDF并执行移动操作 all: $(FILE).pdf move # 编译tex到pdf的规则 $(FILE).pdf: $(FILE).tex latexmk -pdf -pdflatex=$(PDFLATEX) -f -use-make $< # 移动文件的规则(按需补充具体命令) move: # 示例:mv $(FILE).pdf ./output/
用法:
- 生成德语简历:
make或make LANG=DE - 生成英语简历:
make LANG=EN - 若传入错误的LANG值,Makefile会直接抛出错误终止执行。
方案2:单条命令生成双语简历
无需指定语言参数,一次编译生成德语和英语两份简历:
# 定义pdflatex命令,可按需替换 PDFLATEX ?= pdflatex # 两种语言的简历文件路径 DE_FILE = ./directory/resume_de EN_FILE = ./directory/resume_en # 默认目标:同时生成两份PDF并执行移动操作 all: $(DE_FILE).pdf $(EN_FILE).pdf move # 通用编译规则:匹配所有.tex文件生成对应的.pdf %.pdf: %.tex latexmk -pdf -pdflatex=$(PDFLATEX) -f -use-make $< # 移动文件的规则(按需补充具体命令) move: # 示例:mv $(DE_FILE).pdf $(EN_FILE).pdf ./output/
用法:
直接执行make all,即可一次性编译生成德语和英语的简历PDF。
内容的提问来源于stack exchange,提问作者Violet
相关产品推荐
相关产品推荐

