2016-06-09 51 views
0

我正在運行一個編譯大量項目的長生成腳本,並且對於大多數生成make通常返回make: Nothing to be done for 'all',這很好,因爲我沒有每次更改那麼多的代碼建立。然而,腳本仍然需要很長時間才能完成,因爲它會爲每個項目和其他一些腳本調用autotools configure腳本。跳過不需要編譯的項目的配置

我讀過某些地方,使用時間戳測試是否需要構建。

有沒有辦法在調用configure腳本之前詢問是否需要編譯? 或者也許另一種方法來防止重新配置所有項目?

+1

'configure'運行的究竟是什麼?這聽起來像是它不需要作爲Makefile的一部分運行,或者它應該有一個依賴關係來防止它在不必要的時候運行。 – chepner

+0

你是對的配置腳本。然而,還有其他腳本正在運行,如果不需要該項目編譯,我想禁用其他腳本。編輯問題 – Nitay

+1

好吧,同樣的事情適用。看起來你的Makefile正在無條件地運行一些事情,它們應該被賦予依賴關係,以便'make'知道什麼時候不需要運行。 – chepner

回答

3

配置完每個項目一次後,您不需要再次運行每個configure腳本,除非這些configure腳本本身發生變化,或者您有理由相信測試結果會發生變化。如有必要,您可以運行config.status來重新創建輸出文件,而無需重新運行所有測試。如果您可以確信輸出文件不需要重新創建,那麼您可以運行make。此外,如果您將Automake與Autoconf結合使用,那麼您的Makefiles將使用工具構建,該工具會檢測configure的m4源(通常configure.ac)何時發生更改,因此需要重新配置。只要基於Automake的configure生成的Makefile仍然存在,您就可以運行make,它會做正確的事情。如果缺少Makefile,則無論如何您需要運行configureconfig.status

此外,您可以考慮對所有配置腳本使用共享緩存文件,方法是通過--config-cache選項向每個配置腳本指定該文件。這應該通過避免重複測試來減少每個腳本所消耗的時間。