2009-07-16 101 views
66

說我有一個C++項目被拆分成幾個子項目。子項目都產生一個DLL,不同的開發團隊在每個子項目上工作。現在,如果我想構建主項目,是否有辦法避免自己構建所有子項目?C++的類似Maven的依賴管理?

簡而言之,我正在尋找一些能夠像Maven一樣對Java進行依賴管理(即二進制文件和頭文件)的方法。

實際上,我嘗試過使用Maven,但這樣做很麻煩,因爲我必須手動創建軟件包,而且相當頻繁,Maven錯過了選擇最近的更改。另外,運行編譯有點麻煩,因爲我必須從Maven內部調用NAnt(我使用NAnt的功能直接構建Visual Studio解決方案)。

如何做到這一點的任何提示和想法?

+0

使用掙錢的時候,問題是,我必須至少一次創造一切條件,因此還需要依賴的源文件。 特別是,在重建相關庫時,它可能非常耗時且嚴重影響生產力。或者我錯過了什麼? – weberste 2009-07-16 08:54:52

回答

-1

我推薦使用所有構建依賴系統的母親:make。

+0

我廣泛使用它。 GCC可以製作'make'可以吃的依賴文件。夠另一個答案,也許...... – Will 2009-07-16 08:45:25

+7

化妝其實是每個人都希望避免/看在構建-automation-系統 – chila 2012-03-26 18:15:10

5

如果您只需要依賴管理,請嘗試Ivy,它與Ant很好地集成(並且我假定NAnt可以根據此blog,它從Ivy站點鏈接)執行相同操作。還有Byldan,一個.Net版本的Maven。不知道這對你有多好,儘管如此。

3

Make和GCC是一個非常好的依賴檢查組合。例如,GCC可以自動生成「make」依賴文件(-MD命令行切換),以便能夠重建依賴於給定報頭的所有源文件。

我有我切正貼到我的makefile一些簡單的規則:

# compile c files 
%.o: %.c 
    ${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o [email protected] 

# compile c++ files 
%.opp: %.cpp 
    ${CPP} ${CPPFLAGS} -c $< -MD -MF $(<:%.cpp=%.dep) -o [email protected] 

現在,如果你的目標文件中說的OBJ_C和OBJ_CPP列表中聲明:

.PHONY: cleandep 
cleandep: 
    rm -f $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep) 

-include $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep) 

當然,可以跟蹤其他項目等的依賴關係,例如必要時重建共享庫。

例如,如果你的其他團隊始終把自己最新的DLL某些共享文件夾:

myapp: ${SRC_CPP} ${LIB_DIR}other_team.lib 
    ... 

${LIB_DIR}other_team.lib: /shared_folder/latest/other_team.lib 
    cp /shared_folder/latest/other_team.lib ${LIB_DIR}other_team.lib 
+0

看到我的評論附着於對我的關注與此解決方案 – weberste 2009-07-16 08:55:33

+0

的問題如果目標是依賴於另一個替換一下文件例如您的可執行文件依賴共享庫,您可以爲該共享庫制定一個規則,確保您的庫副本不需要源代碼即可獲得最新版本,例如通過簡單地從特定位置獲取最新副本或執行某些版本控制更新等。 – Will 2009-07-16 09:54:54

22

我建議使用CMake的。它是一個多平臺的make文件生成器(也生成Visual Studio或Eclipse CDT項目)。

http://www.cmake.org/

我與它真的很好的經驗。我最喜歡的是能夠生產通用項目結構。因此,您可以一般地包含子項目查找單元測試等,而無需每次都更改腳本。

他們也有很多的模塊如何找到預裝建庫,項目所需(如升壓,QT等)


更新:在平均時間出現了一些努力,爲C++引入包管理。

  • CMake的
  • 的Visual Studio
  • 的Makefile
  • 的XCode
  • ...
    • conan.io與主要的構建工具集成:一些值得考慮的項目cpm基於CMake
  • +7

    幾個月前我用了CMake,事實上,檢查預安裝的庫的工作非常好。但是,其他二進制依賴項(即來自我的子項目的依賴項)無法輕鬆管理。我錯過了什麼嗎? – weberste 2009-07-20 13:06:55

    +2

    @weberste,實際上沒有像C/C++這樣的工具。開發人員嘗試使用apt-get like工具處理依賴關係管理。 – SunnyShah 2015-02-02 15:06:19

    -5

    嘗試scons,你會被迷住。製作過時,維護困難而且昂貴。

    +0

    我曾看過Scons,但沒有找到管理二進制依賴關係的方法。你有這樣的例子嗎? – weberste 2009-07-20 13:05:45

    +1

    因爲scons是python,所以你可以很容易地編寫任何你想要管理你的二進制依賴關係的代碼。也許在你的二進制依賴目錄中有一個「SConscript」也有幫助。我不確定你在這裏的要求是什麼。 Pedro。 – piotr 2009-07-21 05:14:12

    1

    您可以爲使用過的庫創建NuGet包,並使用NuGet進行依賴關係管理。

    參見,NuGet for C++

    14

    對於依賴管理,它存在一個新的項目(這是一個創業公司),這是實現這種類型的工具:https://www.biicode.com/(一個C++依賴管理)。你可以添加你的依賴關係,它應該工作。

    目前,該項目的名稱是conan.io,它們被JFrog收購。

    UPDATE:該項目是dead ...不幸的是,它似乎啓動無法獲得足夠的優質付費用戶,但服務器似乎是工作的罰款...

    UPDATE2:好像是有替代品項目:conan.io(感謝@mucaho)

    -1

    嘗試SCons

    使用SCons是一個開放源碼軟件建設的工具,也就是說,下一代構建工具。可以將SCons看作改進的跨平臺替代品,它具有類似於autoconf/automake和編譯器緩存(如ccache)的集成功能的經典Make實用程序。總之,SCons是構建軟件的一種更簡單,更可靠,更快捷的方式。

    3

    最近公佈:biicode開發商

    一個多平臺的工具和託管服務

    編輯:

    比科德已被棄用

    備選:Conan.io

    0

    有許多工具坐在SCons之上,提供與Autotools類似的更高級別的功能,這些功能試圖讓開發人員的生活更輕鬆(例如。 WAF,SNOCS)。不幸的是,SCons本身存在主要缺點 - 大型項目的編譯時間較長。

    我可以推薦嘗試SNOCS(這是一個SCons的反向),對於那些你尋找一種簡單的依賴管理,並在單個命令選擇編譯選項(編譯器,在x86/x64,調試/發佈,靜態/共享庫,測試/安裝目標等)。

    SNOCS還嘗試通過將項目配置輸出存儲在單獨的文件中來解決長時間的編譯時間問題,這允許後續的構建完全跳過配置階段並直接進入構建階段(最後一個功能正在構建中)

    CMake的的結構變得在一個較大的解決方案的繁瑣,所以構建系統需要維護的顯影時間的很大一部分。幸運的是,Martijn已經提到biicode這是「使用CMake生成你的項目的依賴」。

    2

    我建議conan,我用這些天。 在項目中維護所有相關庫和二進制文件非常強大。