2010-08-07 90 views
1

我正在開發一個使用大量第三方庫(目前有22個,並計數的跨平臺項目,我預計這個數量會顯着增加)。我的項目是基於CMake的,並保持像這樣組織的第三方/目錄:構建和管理第三方庫的框架

第三方/ $ LIBNAME /包括/
第三方/ $ LIBNAME/lib中/ $平臺/ $ buildtype/

我CMakeLists。 txt具有確定$ platform(mac-i386,mac-ia64,win32-i386等)和$ buildtype(debug/release)的適當值的邏輯。

保持這些庫在每個平臺上都是最新的困難就出現了。目前我正在手動執行此操作 - 當我更新一個庫時,我會爲每個平臺重新構建它。但這是一場噩夢,而增加一個新平臺則是兩天的事情。

如果第三方庫本身是基於CMake的,這將很容易實現自動化,但它們使用從CMake到autoconf的所有功能,以及自定義解決方案以實現手動生成的Makefiles。它們之間沒有一致性,所有這些都需要跳過構建平臺(尤其是關於32位和64位版本)。

是否有任何工具(或CMake擴展),這將使這更容易管理?例如,是否有任何可以在CMake和autoconf之間達成的共同理由?

理想的解決方案會給我一個命令來構建需要爲給定平臺重建的所有東西(不需要交叉編譯,因爲我可以訪問所有必需的平臺),但是任何增量使我的生活更輕鬆的東西不勝感激。

回答

1

爲此,您可以使用ExternalProject

創建自定義目標以在外部樹中構建項目。 'ExternalProject_Add'函數創建一個自定義目標來驅動下載,更新/修補,配置,構建,安裝和測試外部項目的步驟。

如果你已經在你的項目的文件層次的來源,那麼你可以使用像這樣(爲zlib的):

include(ExternalProject) 
ExternalProject_Add(zlib URL ${CMAKE_CURRENT_SOURCE_DIR}/zlib-1.2.4/ 
    CONFIGURE_COMMAND cd <SOURCE_DIR> && ./configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/zlib-build 
    BUILD_IN_SOURCE 1 
    BUILD_COMMAND make) 

這將zlib的源代碼,從你的源代碼樹複製到構建樹,運行配置步驟(在cd到複製目錄後),然後在配置的目錄上運行make。最後,將zlib的內置版本安裝到當前構建目錄中的一個名爲zlib-build的子目錄中。

不管你喜歡什麼,你都可以調整設置,配置和構建步驟 - 例如zlib 1.2.4不希望「配置」運行超出源代碼。

對於自定義設置,您可以跳過配置步驟,然後運行build命令(例如)。這需要最近的CMake版本才能工作(2.8+)。

+0

哇。這看起來像我正在尋找的。謝謝! – Xtapolapocetl 2010-08-07 21:22:27