2013-08-28 53 views
1

我是新来的,使用makefiles。 我有一个问题,请:根据输入文本文件在生成文件中生成目标

我had3测试执行:

我手动添加TEST1,TEST2和TEST3为目标,在我的make文件是这样的:

test1: compile_design 
compile test1_testname.vhd >> log_file.log 
simulate test1_testname 

我做了samething为测试2和3

也是我加

all : test1 test2 test3 

这很奇妙。

现在,我想使这个makefile文件更加便携:从包含以下信息的输入文件 :

test1_testname 
test2_testname 
test3_testname 

我要自动 和一般的n个目标,如果添加了3个目标输入文件包含n行。

回答

1

你甚至不需要使用源文件。将目标列在Makefile的顶部可能会更容易。然后,通过使用模式规则,您可以拥有以下所需的内容。

TESTS=test1_testname test2_testname test3_testname 

all: $(TESTS) 

%_testname: compile_design 
    compile [email protected] >> log_file.log 
    simulate [email protected] 

你可以注意到,该模式规则的目标定义为test1_testname,而不是更短test1。这是为了避免出现%模式规则。

如果你真的想用另一个文件列出你的目标,你可以用

TESTS=$(shell cat yoursourcefile) 
+0

由于更改的第一行。 但通常每个测试的test_name不同。 THST。这就是为什么我需要让目标命名短: 有什么办法来产生他们喜欢: testX:compile_design 编译$ @ VHD >> log_file.log 模拟@ $有X从0到test_number(获得从文件行号) 也我需要一个输入文件,因为测试号码将从一个项目到另一个不同。 我希望有一种方法可以做到这一点。 – user2725571

+0

请注意,即使名称不同,它也可以在'%:compile_design'中使用'%'目标。此外,命令中的$ @将自动替换为目标名称,即当前的测试名称。 –

+0

我用 '%:编译设计 编译$ @ VHD >> log_file.log 模拟$ @ ' 但我得到了makefile_tb.vhd >> log_file.log 仿佛makefile文件是一个目标。 – user2725571