我有一個編譯工作,其中鏈接需要大量的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. QTreeView則對某些行禁止選擇
- 2. GNU Make不執行第一個目標
- 3. 強制GNU make執行特定目標
- 4. 防止線程執行某些方法
- 5. Nodejs讀取某些進程的stdout並執行某些操作
- 6. make:僅在單個目標的子目錄中禁用並行構建
- 7. 禁止在Swift操作系統中運行某些代碼行
- 8. 執行`make check`或`make test`
- 9. 如何防止make實用程序同時執行相同的目標?
- 10. 禁止某些字符串
- 11. make:沒有目標。停止
- 12. make:***沒有目標。停止
- 13. 停止並行執行
- 14. cygwin不執行make
- 15. make執行在makefile
- 16. make:無法進行目標安裝。停止OpenLDAP的
- 17. 如何自動執行文件更改的make目標?
- 18. 如何控制make目標的執行順序?
- 19. 某些子網格未使用CUDA動態並行執行
- 20. 禁用列中的某些行
- 21. ASP.net Gridview禁用某些行的選擇
- 22. 執行make後恢復光標位置
- 23. 檢查某個MQTT響應並執行某些操作
- 24. 檢查CMake的運行make目標
- 25. 執行「make modules_install」而不執行「make modules」是否有意義?
- 26. 禁止某些機器人使用htaccess訪問某個目錄
- 27. 如何防止PHP在網站的某些部分執行?
- 28. GNU Make規則僅在目標存在時執行?
- 29. highcharts禁用某些標籤
- 30. 如何處理多個並行make調用命令的目標
這怎麼可能「打破個別目標」? – Beta