【问题标题】:Using Makefile to selectively simulate a test使用 Makefile 选择性地模拟测试
【发布时间】:2019-01-18 19:07:53
【问题描述】:

我想要一个 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

【问题讨论】:

    标签: makefile compilation simulate


    【解决方案1】:

    这似乎正是 automatic variables 的创建目的……?

    这是怎么回事:

    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)"
    

    其他:

    • 您永远不想在配方中使用 make shell 函数。
    • 我真的不明白将echo 放入带有(...) 的子shell 中有什么意义

    【讨论】:

    • 感谢您的详细解释。当我使用自动变量并且没有足够的知识来调试问题时,我搞砸了。你的例子对我帮助很大。谢谢。
    • 诀窍是,当您想将自动变量放入值中时,您不能使用简单变量 (:=),因为您需要推迟扩展,直到它们实际出现在配方中。
    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多