2011-08-22 27 views
4

我有一個編譯工作,其中鏈接需要大量的IO工作。我們有十幾個核心,所以我們運行make -j13,但是當涉及到連接6個目標時,我希望以循環方式完成這些目標。我想讓人依靠下一個,但我認爲這會打破個人目標。任何想法如何解決這個小問題?make:禁止某些目標的並行執行

+0

這怎麼可能「打破個別目標」? – Beta

回答

3

make本身並沒有提供一種機制來請求「N個這些,但是每次不超過M個」。

您可以嘗試在鏈接器規則的配方中使用GNU parallel包中的sem命令。其文檔有example of ensuring only one instance of a tool runs at once。在你的例子中,你會允許make一次啓動多達13 sems,但是一次只能有一個運行鏈接器,而其他的則會阻塞。

不足之處在於,您可能會遇到以下情況:您的make的13個作業槽中的5個與sem的實例捆綁在一起,這些實例都等待鏈接器進程完成。根據你的構建的結構,這可能意味着一些浪費的CPU時間。儘管如此,仍然擊敗6連接器顛簸盤,雖然:-)

-1

它不會破壞個別目標。 您可以爲目標創建任意數量的(:)規則,只要其中一個具有用於構建目標的實際配方即可。這似乎是一個很好的用例。

+0

你能更具體嗎?我試過|依賴順序,但它不能按預期工作,因爲即使在編譯單個目標時它也會構建de依賴項。 – piotr

+0

你能更具體嗎?你究竟做了什麼? – reinierpost