2015-04-30 27 views
0

在不同的目錄執行的目標文件,我有以下的Makefile項:使用的Makefile

TEST_DIRS = abcd pqr xyz 

test_lib : 
     for dir in $(TEST_DIRS); do \ 
       $(MAKE) -C $$dir; \ 
     done 
run : 
     ./abcd/test/abcd_test.o --log_level=message 
     ./pqr/test/pqr_test.o --log_level=message 
     ./xyz/test/xyz_parser_test.o --log_level=message 

test : test_lib run 

我不想寫3個獨立的命令來運行的目標,而不是使它通用。因此,每次添加新的測試文件時,我都不想在運行目標下添加新命令。有人能幫助我嗎?

+0

我不認爲這些是目標文件。 – Beta

+0

您通常執行二進制文件而不是對象文件。 –

回答

1
TESTS := $(addprefix TEST_, $(TEST_DIRS)) 

run: $(TESTS) 

TEST_%: 
    ./$*/test/$*_test.o --log_level=message 
+0

嘿謝謝測試版。有用!!!! –

1

假設命名方案是一致的(和那些都只是名字古怪的二進制文件,並沒有實際目標文件),那麼這樣的事情應該工作:

使用殼循環:

run : 
     for name in $(TEST_DIRS); do \ 
      ./$$name/test/$${name}_test.o --log_level=message; \ 
     done 

使用make foreach

run : 
     $(foreach name,$(TEST_DIRS),./$(name)/test/$(name)_test.o --log_level=message;) 
+0

嘿,謝謝Etan。 –