2013-02-09 56 views
3

我的構建系統堅持執行使在一個呼叫中的所有目標,所以我得到:「對'乾淨」做沒有什麼」gnuMake,如何強制假目標多次運行?

make clean test clean build

第二清潔只想說即使它被添加到.PHONY目標。

有什麼辦法呢?

+0

簡答題:沒有。較長的回答:也許,你想做什麼? – Beta 2013-02-09 05:36:06

+0

@Beta基本上我有一個虛假的步驟來創建一些數據文件(基本上它連接了一些文件,並運行模板引擎來填補一些空白),然後我運行測試,然後我清理一切,然後再次運行該數據文件步驟實際包裝軟件的最後一步...公司使用哈德森工作。我想我會在第一個測試之後觸發一個新的包裝步驟。試圖避免這一點,因爲它太昂貴(及時)創建一個新的虛擬機和所有的......或者我可能只是複製那個虛假目標的工作兩次(畢竟它是兩行的make文件) – gcb 2013-02-09 06:05:35

+1

你確定'test'步驟修改數據文件?如果是這樣,你應該重新考慮你的設計;如果沒有,則不需要重建它們。也就是說,最簡單的方法可能是複製構建它們的命令。 – Beta 2013-02-09 16:49:16

回答

3

喲!做不是做到這一點。當您使用make -j時,不要依賴目標的隱式排序—它完全更改。讓您的訂購明確。如果你真的必須清理構建之間,則是這樣的:

.PHONY: everything 
everything: 
    ${MAKE} clean 
    ${MAKE} test 
    ${MAKE} clean 
    ${MAKE} build 

再次,遞歸make是相當臭,但在這種情況下,你最好的選擇。

+0

我對這個環境有-j的控制權,但這是一個非常好的想法。 – gcb 2013-02-11 18:56:49

4

我對此產品進行了驗證。試試這個:

test: ... 
    ... 

build: ... 
    ... 

clean%: ... 
    ... 

然後,您可以撥打:

make clean1 test clean2 build 

似乎只要目標名稱是不同的,即使它擊中同一個目標模式,它會重新運行它。

+0

不幸的是,當你使用平行_make_(這是_make_恕我直言的整點)時,它會完全中斷。 – bobbogo 2015-07-09 10:53:27

相關問題