我管理一個複雜的C++項目,其構建定義寫在CMake
中,構建本身是通過調用make
獲得的。源代碼樹由許多模塊組成,並且具有高度的可並行性。爲並行版本調試CMake/Make dependencies
線性構建總是成功,而並行構建在大多數時候都是成功的。當在這樣的構建過程中遇到依賴關係問題時,我通常會去修復它,但我想以編程方式測試依賴關係,而不是在發生問題時解決問題。
理想的解決方案是遍歷CMake
中的所有依賴關係並修正它們,但實際上這並不總是可行,因爲我們大量使用自定義宏來處理特定於源代碼樹的某種依賴關係(我不能詳談,對不起)。所以,我正在考慮以不同的方式解決問題(並且可能有效),儘可能地重用標準工具。
我首先想到的是注入了某種「隨機性」在
Make
作業調度,所以成型機可以嘗試無限期,直到遇到一個重建故障樹行使不同的編譯路徑。然而,另一個問題(here)指出,該功能在Make
中不可用。所以我試圖用另一種解決辦法:我創建了一個包裝腳本左右
g++
該睡了$RANDOM
秒數,帶來一些噪音在Make
工作調度。這個解決方案的缺點當然是增加了編譯時間。然而,這種部分解決方案存在一個基本缺陷:如果發現問題,則證明缺少依賴關係,但是,如果沒有生成錯誤,我們不能證明所有依賴關係都是正確的。
你覺得呢?我怎麼能達到我的目標?我更喜歡重複使用標準工具的解決方案,並且可以應用於廣泛的受衆。
謝謝。
當構建失敗,不運行它再次幫助這個問題? – arrowd 2012-10-08 17:03:01
@arrowdodger是的,但我希望一次就完成一次構建。 – 2012-10-08 17:41:23
將'make'調用到調用'make'的腳本中,直到成功算作一次? – arrowd 2012-10-08 17:52:14