2011-10-14 63 views
2

我有一個生成文件,其中包含一些生成某些數據的目標(如data1dataN,其中alldata取決於),以及一個對輸出進行迭代並創建漂亮報告的目標目標文件prettify。 (注:有很多dataN目標和生成文件是機器生成的)GNU make:在別人之後運行一個目標,而不管失敗嗎?

一些dataX目標偶爾會失敗,但我想運行prettify無論如何,所以prettify不依賴於alldata

有沒有一種方法可以在make的單個調用中運行相當於make -k alldata || make prettify的方法,以便make盡最大努力構建所有數據,然後構建我所做的任何報告?

回答

0

命令失敗時通常保留。如果你在失敗的命令後面加上「|| true」,make會繼續執行,這意味着你的美化也會被執行。

+0

爲什麼這會降低投票率?我使用'@command ||:'放棄它的返回值... –

+0

也許是因爲'-command'更簡潔嗎? (我故意忽略了@,它是一個反模式的恕我直言。) – tripleee

1

您可以使用任何您喜歡的控制邏輯編寫遞歸目標。這並不妨礙某人從命令行運行目標,因此您無法強制執行您的邏輯,但這對於方便的目標來說很不錯。事情是這樣的,也許:

.PHONY: all 
all: 
     $(MAKE) -k -$(MAKEFLAGS) alldata \ 
     ; rc=$$? \ 
     ; $(MAKE) $(MAKEFLAGS) prettify \ 
     ; exit $$rc 
相關問題