我有一個編譯工作,其中鏈接需要大量的IO工作。我們有十幾個核心,所以我們運行make -j13,但是當涉及到連接6個目標時,我希望以循環方式完成這些目標。我想讓人依靠下一個,但我認爲這會打破個人目標。任何想法如何解決這個小問題?make:禁止某些目標的並行執行
回答
make
本身並沒有提供一種機制來請求「N個這些,但是每次不超過M個」。
您可以嘗試在鏈接器規則的配方中使用GNU parallel包中的sem
命令。其文檔有example of ensuring only one instance of a tool runs at once。在你的例子中,你會允許make
一次啓動多達13 sem
s,但是一次只能有一個運行鏈接器,而其他的則會阻塞。
不足之處在於,您可能會遇到以下情況:您的make
的13個作業槽中的5個與sem
的實例捆綁在一起,這些實例都等待鏈接器進程完成。根據你的構建的結構,這可能意味着一些浪費的CPU時間。儘管如此,仍然擊敗6連接器顛簸盤,雖然:-)
它不會破壞個別目標。 您可以爲目標創建任意數量的(:
)規則,只要其中一個具有用於構建目標的實際配方即可。這似乎是一個很好的用例。
你能更具體嗎?我試過|依賴順序,但它不能按預期工作,因爲即使在編譯單個目標時它也會構建de依賴項。 – piotr
你能更具體嗎?你究竟做了什麼? – reinierpost
- 1. GNU Make不執行第一個目標
- 2. 強制GNU make執行特定目標
- 3. Nodejs讀取某些進程的stdout並執行某些操作
- 4. 禁止在Swift操作系統中運行某些代碼行
- 5. 執行`make check`或`make test`
- 6. 如何防止make實用程序同時執行相同的目標?
- 7. 禁止某些字符串
- 8. cygwin不執行make
- 9. make:無法進行目標安裝。停止OpenLDAP的
- 10. 如何控制make目標的執行順序?
- 11. 執行make後恢復光標位置
- 12. ASP.net Gridview禁用某些行的選擇
- 13. 檢查CMake的運行make目標
- 14. GNU Make規則僅在目標存在時執行?
- 15. 承諾中的某些可執行文件未被執行
- 16. 禁用某些Docker運行選項
- 17. Thread.Sleep阻止任務的並行執行
- 18. 運行GNU make目標與參數
- 19. YouTrack:禁止某些字段的通知
- 20. 如何阻止某些SQL查詢在SQL Server 2008上執行
- 21. 太多連接到DB防止某些查詢從執行
- 22. 當我執行syncdb時,如何阻止django同步某些表?
- 23. Make語句可執行
- 24. WScript.Shell並阻止執行?
- 25. Python UnitTest並禁止類成員的某些值
- 26. 使用make來並行執行獨立任務
- 27. Mac OS:執行某些操作的腳本,然後啓動一個應用程序,然後等待,直到它終止,並最終執行某些操作?
- 28. 防止在Oracle中刪除某些行
- 29. 如何停止運行某些代碼?
- 30. 行中的某些行html
這怎麼可能「打破個別目標」? – Beta