2013-08-28 81 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