如何在Makefile中基于目标名称动态执行对应命令?
批量生成Makefile测试用例规则的实现方法
方法1:静态模式规则(推荐,可控性强)
先集中管理测试用例列表,再通过静态模式批量生成规则:
# 列出所有测试用例目标 TEST_CASES := tc1 tc2 tc3 # 静态模式规则:匹配每个测试用例目标 $(TEST_CASES): tc%: ./a.exe ./a.exe < ./tc$*.txt # 可选:添加all目标一键运行所有测试 all: $(TEST_CASES) # 声明伪目标,避免与同名文件冲突 .PHONY: all $(TEST_CASES)
TEST_CASES变量统一管理测试用例,后续新增/删除只需修改此变量tc%为目标匹配模式,$*会自动替换为模式匹配到的部分(比如目标是tc1,$*就是1).PHONY确保执行make tc1或make all时,不会因为存在同名文件tc1而跳过命令执行
方法2:通用模式规则(无需提前列测试用例)
如果所有测试用例都是tcN格式,且对应tcN.txt文件存在,可直接用通用模式规则:
tc%: ./a.exe ./a.exe < ./tc$*.txt # 可选:一键运行所有匹配的测试用例(自动识别所有tcN.txt文件) TEST_CASES := $(patsubst ./tc%.txt,tc%,$(wildcard ./tc*.txt)) all: $(TEST_CASES) .PHONY: all $(TEST_CASES)
wildcard ./tc*.txt自动找出当前目录下所有tcN.txt文件patsubst将文件名转换为对应的目标名(比如tc1.txt转成tc1)- 此方式适合测试用例文件较多且频繁新增的场景
内容的提问来源于stack exchange,提问作者Deepak Sangle
相关产品推荐
相关产品推荐

