如何用单命令执行多Makefile?或编写循环批量执行的Makefile?
批量执行不同NAME参数的Makefile解决方案
我懂这种搜不到答案的挫败感——有时候问题卡就卡在不知道怎么把需求转换成准确的搜索关键词!针对你要批量给tad、tad01到tad27这些值设置NAME标签,重复执行Makefile的需求,这里有两个实用的方案:
方案1:用Shell循环直接调用Make
在终端里运行这段脚本,它会自动遍历所有需要的NAME值,每次调用Make时传入对应的参数:
# 先处理基础的tad make NAME=tad doc clean # 再循环处理tad01到tad27 for i in {01..27}; do make NAME=tad$i doc clean done
如果你的场景不需要单独处理tad(只需要tad01到tad27),删掉第一行的make NAME=tad doc clean就行。这个方法不需要修改原Makefile,直接在终端执行就能搞定。
方案2:在Makefile内部添加批量目标
如果你希望只需要执行一次make命令就能完成所有操作,可以修改你的Makefile,添加以下内容:
# 定义所有需要处理的NAME列表:tad + tad01到tad27 ALL_NAMES := tad $(addprefix tad, $(shell seq -w 01 27)) # 批量执行的总目标 batch: $(ALL_NAMES) # 为每个NAME生成对应的执行规则 $(ALL_NAMES): @make NAME=$@ doc clean # 别忘了把新添加的目标加到PHONY里,避免和文件重名冲突 .PHONY: batch $(ALL_NAMES) doc clean
之后在终端运行make batch,Make就会自动依次用每个NAME值执行doc和clean目标。
小提示
- 如果你的Makefile里
NAME参数还控制其他逻辑(比如生成特定命名的文件),这两个方案都能正确传递参数,不会影响原有逻辑。 - 如果需要跳过某个特定的
tadxx值,比如tad10,方案1里可以在循环里加判断,方案2里直接从ALL_NAMES列表里删掉对应的项就行。
内容的提问来源于stack exchange,提问作者vladelukr
相关产品推荐
相关产品推荐

