2010-08-19 39 views
1

我有一個包含規則的生成文件來構建系統,測試並運行它們。最後一項是通過調用一個shell腳本來執行的。除此之外,這阻止了我並行運行測試。如何使makefile規則執行其先決條件?

我有以下變量:

TEST_SRC=$(wildcard tests/*.c) 
TESTS=$(patsubst %.c,%,${TEST_SRC}) 

,並建立與規則測試

$(TESTS): %: %.c 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] $< 

是否有可能(如果有的話,怎麼樣?)創建規則「測試」在運行時,會執行$TESTS變量中的每個項目?

回答

5

你可以這樣來做:

# a separate target to run each test 
RUN_TESTS = $(addprefix run_, $(TESTS)) 

# a pattern rule for those targets, which will remake the test iff neccessary 
.PHONY: $(RUN_TESTS) 
$(RUN_TESTS):run_%:% 
    ./$< 

# One Rule to Ring Them All, One Rule to... sorry. 
.PHONY: tests 
tests: $(RUN_TESTS) 
+0

非常感謝! – Tordek 2010-08-19 18:02:18

0

我相信,像這樣的規則:

run_tests: $(TESTS) 

應該做的伎倆:

$ make run_tests 

它不會執行任何操作,但將有$(TESTS)的依賴,首先運行它們。

+0

$(測試)是_builds_測試的規則。如果我想重新運行測試會很麻煩,因爲這意味着重新編譯它們。 – Tordek 2010-08-19 03:48:45

+0

更重要的是,這不會實際運行測試。 – Beta 2010-08-19 14:49:58

相關問題