2014-11-14 42 views
0

我有一個C程序 - example.c,一旦它編譯我想用它來生成測試結果。 ./tests/%.in下的每個文件都是一個測試用例。如何使用makefile來創建測試結果

而且我想從他們每個人的創造./tests/%.out

我想類似的東西:

all: test_results 

example: example.c 
    gcc example.c -o example 

test_results: example ./tests/%.out 

./tests/%.out: ./tests/%.in 
    ./example $^ > [email protected] 

,但我得到的錯誤,它並沒有真正似乎做的工作。

+0

你能給你得到確切的錯誤? (以及您如何使用該makefile)。 – Dettorer 2014-11-14 15:50:42

+0

沒有規則來制定目標'tests /%。out','test_results'需要 而且通常情況下,它似乎不是最好的方法 – user972014 2014-11-14 15:53:31

+0

我認爲你的方式沒有問題除了少數錯誤)。如果確實只有一個二進制文件,一個文件夾中有一堆測試文件,並且每個測試輸入都需要一個輸出文件,那麼對我來說這似乎很好。 – Dettorer 2014-11-14 16:10:17

回答

1

%是通配符只能在一個模式的規則,如果你想獲得一個目錄下的每個文件,請使用*wildcard功能,而不是沿:

all: test_results 

example: example.c 
    gcc example.c -o example 

TEST_INPUT = $(wildcard tests/*.in) 
test_results: example $(TEST_INPUT:.in=.out) 

./tests/%.out: ./tests/%.in 
    ./example $^ > [email protected] 

此外,您還可以擺脫的./您的路徑的前綴,並可能想要使alltest_results規則phony。您test_results規則的example依賴性放錯了地方太(如果example是過時也不會更新.out文件),它應該是.out的依賴文件本身:

.PHONY: all 
all: test_results 

example: example.c 
    gcc example.c -o example 

TEST_INPUT = $(wildcard tests/*.in) 
.PHONY: test_results 
test_results: $(TEST_INPUT:.in=.out) 

tests/%.out: tests/%.in example 
    ./example $< > [email protected] 
+0

現在我的makefile生成一個名爲tests/*。out的文件 – user972014 2014-11-14 16:15:12

+0

@ user972014對不起,我忘了一些重要的東西,我編輯了。 – Dettorer 2014-11-14 16:25:55

+0

我也在第二個Makefile中刪除了需要的'。/',現在已經修復了。對不起草率的回答,我測試了它,現在它可以工作。 – Dettorer 2014-11-14 16:31:07

相關問題