makefile - 使用 Makefile 选择性地模拟测试
问题描述
我想要一个 Makefile 变量来保存一个测试列表,但使用不同的标志运行每个测试,并且能够运行所有测试或有选择地从命令行运行一个测试。这是我到目前为止所拥有的,我不确定如何添加更多测试,但要防止为每个测试创建单独的变量。在下面的示例中,我可以说 make all 或 make run_tests TESTS=block_test_A 来运行所有测试或特定测试。这可行,但如果我要添加另外 10 个测试,我只想修改 TESTS 字符串并将它们添加到那里,而不是添加 TEST4、TEST5 等。有没有一种聪明的方法来制作一个可以解析 TESTS 中的测试列表并创建变量的循环。我尝试了几种变体,但无法使其正常工作。sim_design 是未显示的目标,它将使用 Makefile 变量 SIM_FLAGS 和 SIM_LOG 中的值执行编译/模拟。谢谢。
TESTS := block_test_A block_test_B block_test_C
TEST1 := $(word 1, $(TESTS))
$(TEST1) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST1)"
$(TEST1) : SIM_LOG:= "logs/$(TEST1).log"
TEST2 := $(word 2, $(TESTS))
$(TEST2) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST2)"
$(TEST2) : SIM_LOG:= "logs/$(TEST2).log"
TEST3 := $(word 3, $(TESTS))
$(TEST3) : SIM_FLAGS:= "$(SIM_FLAGS) -top $(TEST3)"
$(TEST3) : SIM_LOG:= "logs/$(TEST3).log"
$(TESTS):
$(shell mkdir -p logs)
@(echo Running TEST $@ with SIM_FLAGS=$(SIM_FLAGS) SIM_LOG=$(SIM_LOG))
$(MAKE) sim_design SIM_FLAGS=$(SIM_FLAGS) SIM_LOG=$(SIM_LOG)
run_tests: $(TESTS)
all:
@(echo Running Regression on $(DESIGN_TOP) with following list of tests $(TESTS))
@(echo To run a single test generating a dump use: make run_tests TESTS=\"valid_test_name\" REGRESS=0)
$(MAKE) run_tests REGRESS=1
解决方案
这似乎正是为......创建了哪些自动变量?
这有什么问题:
TESTS := block_test_A block_test_B block_test_C
SIM_FLAGS += -top $@
SIM_LOG = logs/$@.log
$(TESTS):
@mkdir -p logs
@echo Running TEST $@ with SIM_FLAGS=$(SIM_FLAGS) SIM_LOG=$(SIM_LOG)
$(MAKE) sim_design SIM_FLAGS="$(SIM_FLAGS)" SIM_LOG="$(SIM_LOG)"
其他事情:
- 你永远不想
shell
在配方中使用 make 函数。 - 我真的不明白将其
echo
放入子外壳的意义(...)
推荐阅读
- c++ - 有什么方法可以更快地打印 2D 阵列?
- r - 如何从数据中生成 R 中与 igraph 兼容的边集
- android - 使用 AndroidAnnotations 库时何时注入视图?
- c# - 调整大小时按钮内容超出按钮
- python - 3D 数组 - 将先前的 2D 数组值作为第 3 维添加到新的 3D 数组
- javascript - 在 Android 上使用 Chrome 浏览器上传时“找不到字体系列标签”
- machine-learning - 如何在python中执行肘法?
- ruby-on-rails - 功能规范在本地通过,但在 Circle CI 上失败
- java - Java图形 - 如何在绘制调用之间添加延迟以创建动画?
- postgresql - 使用 PK 序列列值作为另一个非空列的默认值