2014-05-03 47 views
4

我正在研究一個更大的項目,我們正在考慮如何組織大型構建。我認爲它應該/可以用cmake完成,但目前我不知道我們的所有要求如何得到滿足。如何使用cmake組織大型構建

這是我們項目的組織是什麼樣子:

  • 該項目包括多個子項目(稱爲構建模塊)
  • 每個構建模塊包括用於創建靜態或動態庫多個部分組成,可執行文件或測試
  • 構建模塊可能取決於其他構建模塊的公共接口
  • 爲了快速構建時間,每個構建模塊應構建在單獨的CI服務器上。從一些二進制庫中的每個時間,但取出(我們正在考慮的NuGet這裏,但最簡單的解決方案可能是網絡共享)

考慮到C進行的依賴不應該建,我想的目錄結構像這樣

- Root directory 
    - Build Module 1 
     - Build Module 1 Static Lib 
     - Build Module 1 Unit Test 
     - Build Module 1 Public Interface 
    - Build Module 2 
    - ... 
    - Build Module n 

第一個問題在這裏:從哪裏開始放置CMakeLists.txt文件?我會從構建模塊級開始,而不是根級。這樣,如果開發人員只想構建模塊3,4和5,則可以創建自定義的一個。

第二個:如何處理部署/查找包。理想情況下,依賴關係的查找機制將允許創建從源代碼構建的構建以及從源代碼獲取相關二進制文件的構建。我希望這可以通過find_package和xxxConfig.cmake/FindXXX.cmake以某種方式完成。有人能告訴我如何?我如何創建這些文件?你如何使用cmake創建適當的部署?

第三個問題:有人提供一些關於如何將nuget整合到這個過程中的信息?這可以做爲cpack發電機嗎?有沒有一個? cpack可以替代nuget嗎(這意味着它可以從遠程位置獲取二進制文件並將它們安裝到構建過程中)?

謝謝。 托比亞斯

回答

2

1)你可以創建一個頂級的CMakeLists.txt文件,並有建立每個模塊高速緩存選項:

http://quickgit.kde.org/?p=extra-cmake-modules.git&a=blob&h=6cbafa2d&hb=5f60617c&f=modules%2FECMOptionalAddSubdirectory.cmake

開發人員可以使用這些選項來構建3,4,5。或者,文檔如何添加他們需要的add_subdirectory()調用。如果模塊也應該建立獨立的(因爲它似乎),做到這一點的方法是:

if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) 
    # Top-level build. Find dependencies. 
    find_package(Module1). 
else() 
    # Built as a subdir together with depenendencies. 
    # Dependencies are already in scope. 
endif() 

2)我寫這篇文檔CMake的3.0,但大部分適用於2.8:

http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html

您可以配置文件可能添加到包含一些源像

add_subdirectory(${CMAKE_CURRENT_LIST_DIR}) 

獲得「源代碼包」使用find_package和操縱你的CMAKE_P REFIX_PATH。

3)cmake沒有隨附的nuget cpack發生器。你可能想看看ExternalProject:

http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html

+0

感謝您的答案 - 它會需要一些時間來檢查你他們是什麼意思。 –

+0

@steveire能否更新鏈接? – Lamda