2015-10-20 56 views
0

例如,我的程序使用2個外部模塊,如下圖。C++ Makefile;當外部模塊之間存在依賴關係時該怎麼辦

dependencies between external modules

有模塊A和模塊B 模塊B使用,並且包括在其內部模塊A; A的頭文件,庫和數據(=模型)。

但是他們的版本不同; A中B的版本是3.6,但A的最新版本是3.8

我的程序包含兩個模塊,使用我的Makefile如下所示。 但是,我得到了編譯錯誤,或者,我的程序在運行時得到段錯誤。

g++ -I$(A_PATH)/include -I$(B_PATH)/include \ 
    -L$(A_PATH)/lib -L$(B_PATH)/lib \ 
    -Wl,-rpath,$(A_PATH)/lib -Wl,-rpath,$(B_PATH)/lib \ 
    … 

我想使用最新的模塊A在我的計劃,那麼, 什麼是用在我的Makefile這些模塊的最好方式?

+2

「試圖編譯未公開的代碼時出現未指定的編譯器錯誤」。這裏並沒有太多有用的信息。 –

+2

如果您正在構建模塊A和/或模塊B,則它們不是真正的外部模塊。如果你不這樣做,makefile不能確保你使用的是兼容版本。 Make不是配置管理員。如果您有針對A v3.6構建的A v3.8和B,則您的配置不可用。無論是切換到A v3.6,還是自己建立一個針對A v3.8的B版本。 –

+0

模塊A和B不是開源項目。我無法親自建造圖書館;我可以使用編譯的庫。其實,我想檢查是否有一些衆所周知的技術來解決這個問題。你的評論對我很有幫助。謝謝! –

回答

0

使用不同的目錄。一個用於您的代碼將使用的模塊A v3.8。模塊B的另一個目錄,其下有模塊A v3.6的子目錄。您可以在每個這些目錄中有Makefiles,也可以爲您的源代碼(在單獨的目錄中)使用Makefiles。

+0

正如我上面提到的評論,模塊A和B不是開源項目,也不是我的代碼。我使用git管理我的項目,並且我不希望這些模塊被包含在我的項目中,也不希望將我的Makefiles放入這些模塊的目錄中。但是,如果沒有其他方法,您的建議似乎是一個很好的選擇。我很感謝你回答我的問題。 –