2015-11-02 88 views
0

我在某個目錄d中編寫了我的項目。我有一套龐大的測試用例。所以我想把它們放在d的內部目錄din。另外我想將輸出文件存儲在dout中。如何實現這一目標?在生成文件中切換目錄

對於現在我生成文件的一部分,看起來像:

test: 
    ./a.out <input1.c> output1.txt 
    ./a.out <input2.c> output2.txt 
    . 
    . 
    . 
    . 
    ./a.out <inputn.c> outputn.txt 

(N已知)

make test現在執行程序。

編輯: <>的問題

+1

你是否在'din /'目錄中提供'input#.c'和'output#.txt'(儘管你的文件名是向後的不是嗎?)並修復這些命令以匹配?因爲這只是把'din /'放在每個文件名的開頭(並將文件移動到目錄中)。 –

回答

1

修正創建一個子目錄din。把你的Makefile在那裏運行測試。

在主目錄的Makefile,輸入規則

test: 
    $(MAKE) -C din test 

我還要重寫現有Makefile

首先,你不想爲每個文件重複相同的事情。你可以在這裏使用模式規則。所以規則變成

output%.txt: input%.c 
    a.out < $< > [email protected] 

現在如何使test目標取決於每個輸出文件?

如果有一個構造使用上述規則列出可以從現有文件製作的每個文件,但是沒有,那將是非常好的。但是,我們可以採取的.c結束現有的文件列表並將其轉換爲與GNU make的wildcardpatsubst功能相應的輸出文件,雖然它是醜陋:

test: $(patsubst output%,input%,$(patsubst %.c,%.txt,$(wildcard *.c))) 

現在,你只有兩個規則,一個命令。

+0

謝謝..它幫助了很多 – Curious

+0

感謝您的編輯建議。其他人拒絕了,但我已經應用了它。 – reinierpost