2011-10-27 66 views

回答

15

基本上你想循環的先決條件。最顯而易見的方法做,這是能撐船到shell:

log: test_A test_B 
     for f in $^; do ./$$f; done 

或者你可以編寫循環的GNU讓foreach循環,但你必須要小心,從循環體產生的命令出現在不同的行(通過define)或用一外殼終止終止(即,分號,這是更容易):

log: test_A test_B 
     $(foreach f,$^,./$(f);) 

最後,在這種情況下,你可以更簡潔地寫和更不明顯的每個項目上的圖案替換要循環:

log: test_A test_B 
     $(patsubst %,./%;,$^) 

(我敢肯定,你可以添加輸出重定向和$(TESTS)變量如適用)

+1

謝謝您的回答,它證實了我結束了: '$(的foreach測試,$ ^, $(shell ./$(test)>> $ @))' – CJlano

+1

如果這是你的_log_規則的命令,那麼'$(shell ...)'有點顛覆性的東西:規則的命令將是空的,並且'test_?'執行將作爲計算命令的副產品(而不是通過執行命令發生)發生。在哲學上是錯誤的,而且 - 更實際上 - 不可能擴展以捕捉你的'test_?'腳本之一的失敗。 (但是,儘管如此,似乎你想將這個答案標記爲已接受......) –

+0

不是這個循環兩次,一次是test_A,一次是test_B?我有一個類似的問題,並做出非常奇怪的表現。 – Jaseem