2017-09-24 74 views
0

在我的團隊中,我們使用C++作爲主要語言創建了一些應用程序,當新項目到達時,我們總是在需要時複製粘貼其他項目的文件。這很頻繁,我們有一個討論來改進。Cmake - 具有多個項目的庫

因此,爲了改變這個問題,我們決定製作一個獨特的庫(或許多小型庫),其中包含一切不屬於業務本身的東西。我們決定爲此使用cmake。

但是,我的問題是如果有一種方法可以導入這個庫或這些小庫,而不需要每次我們進行修改就編譯它們。

例如,如果我們有兩個庫和兩個項目,其中:

  1. 項目A依賴 - >庫A和文庫B
  2. 項目B依賴於 - >庫只有B

有我們的源目錄是這樣的:

  • LIB一個
    • 包括
    • SRC
    • 的CMakeLists.txt
  • LIB乙
    • 包括
    • SRC
    • 的CMakeLists.txt
  • 項目A
    • 包括
    • SRC
    • 的CMakeLists.txt
  • 項目B
    • 包括
    • SRC
    • 的CMakeLists.txt

如何在項目A和B中設置CmakeLists,如何在庫A或B中更改某些內容,然後重新運行cmake,然後在項目B中創建所有更改。另一個項目也一樣嗎?

可能嗎?

+0

您是否檢查過外部項目?這可能會幫助你。 – usr1234567

回答

0

我在過去的某些個人項目中遇到過同樣的問題。

我可以提供一些建議,其中一些使用的辦法來解決問題,而其中一些並不:

方法1(一種不同的方法,多源控制庫)

不要使用不同的CMake文件分割代碼。 相反,使用一個CMake文件並將代碼分割成較小的存儲庫。

例如,所有共享公用程序庫可能都是單個存儲庫,而應用程序A和B每個都有一個存儲庫。 (當然你也可以將實用程序庫分成多個存儲庫)。

這確保您不必一次持有/更新/處理所有項目,而只需要您實際需要的項目。唯一的缺點是,您在簽出這些項目時會遇到一些限制,但我認爲這不是問題。

方法2(同樣的方法,使用的CMake的add_dependencies)

你可以在應用程序A和B的彙編定義依賴,這樣,如果他們被更新相關的庫會自動構建。

這是一個鏈接到CMake的add_dependencies手冊。

+0

謝謝我將使用子模塊的第一種方法。 – JPalomino

+0

這裏還有另外一個變體,就是將這些庫配置爲[external projects](https://cmake.org/cmake/help/latest/module/ExternalProject.html) – legalize