我正在構建一個具有多個傳遞依賴項的 cmake 專案。例如,假設我有依賴于 lib1 的可執行 ex1。lib1 需要 lib2。這可以這樣可視化:(ex1 -> lib1 -> lib2)。
迄今為止,我將它們公開鏈接以表達所述依賴關系。所以 lib2 的 CMakeLists.txt 會有一行:
target_link_libraries(lib1 PUBLIC lib2)
target_link_libraries(ex1 PUBLIC lib1)
因此,lib1 包含所有來自 lib2 的 ex1 和 lib1。鏈接順序沒問題等。這種方法的問題是,cmake 會等到需求構建完成后再繼續。即在上面的示例中(ex1 -> lib1 -> lib2),我等待 lib1 直到構建 lib2,并且在構建 lib1 之前不開始構建 ex1。
在這種情況下,lib1 是一個庫,而不是可執行檔案。雖然我需要一些關于鏈接順序的資訊并且 lib1 需要 lib2 的包含目錄,但 lib1 沒有必要等到 lib2 被編譯和鏈接。ex1在鏈接的時候需要lib1和lib2,但是只要源代碼中沒有什么惡作劇,不需要ex1等lib1構建完成才開始編譯,lib1也不需要等lib2構建完成再編譯.
這背后的動機是,一些源檔案的編譯時間比其他檔案要長得多。我可以訪問編譯集群,并希望將其分配到容量以減少構建時間。當這些單檔案編譯需要很長時間時,編譯集群基本上是在單個執行緒上編譯單個檔案,而它可以繼續處理其他數百個檔案。
在 cmake 中是否有直接的方法來實作這一點?
uj5u.com熱心網友回復:
@fabian 是正確的。Linux 上的默認生成器是 Make。例如,Ninja 以不同的方式處理依賴關系并在我的案例中導致顯著的加速。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516183.html
標籤:表现制作汇编链接器图书馆
上一篇:將匹配元素作為串列回傳的快速方法
下一篇:如何快速將資料分組
