使用Makefile有选择地模拟测试

使用Makefile有选择地模拟测试,makefile,compilation,simulate,Makefile,Compilation,Simulate,我想要一个Makefile变量来保存一个测试列表,但是使用不同的标志运行每个测试,并且能够运行所有测试,或者从命令行有选择地运行一个测试。这是我到目前为止所做的,我不确定如何添加更多的测试,但防止为每个测试创建单独的变量。在下面的示例中,我可以说make all或make run_tests tests=block_test_A来运行所有测试或特定测试。这是可行的,但是如果我要添加另外10个测试,我只想修改测试字符串并将它们添加到那里,而不是添加TEST4、TEST5等等。有没有一种聪明的方法来

我想要一个Makefile变量来保存一个测试列表,但是使用不同的标志运行每个测试,并且能够运行所有测试,或者从命令行有选择地运行一个测试。这是我到目前为止所做的,我不确定如何添加更多的测试,但防止为每个测试创建单独的变量。在下面的示例中,我可以说make all或make run_tests tests=block_test_A来运行所有测试或特定测试。这是可行的,但是如果我要添加另外10个测试,我只想修改测试字符串并将它们添加到那里,而不是添加TEST4、TEST5等等。有没有一种聪明的方法来创建一个循环,可以解析测试中的测试列表并创建变量。我试过几种不同的方法,但都没用。未显示将使用Makefile变量sim_FLAGS和sim_LOG中的值执行编译/sim的sim_设计目标。谢谢

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)"
其他事项:

  • 您永远不希望在配方中使用make
    shell
    函数
  • 我真的看不出将
    echo
    放入带有
    (…)

感谢您的详细解释。当我使用自动变量时,我把事情搞砸了,并且没有足够的知识来调试这个问题。你的例子对我帮助很大。谢谢。诀窍在于,当您想将自动变量放入值中时,不能使用简单变量(
:=
),因为您需要推迟展开,直到它们实际出现在配方中。