2012-01-09 61 views
7

我目前正在將其中一個項目移植到GCC,並且我正在使用MinGW-w64項目來完成此任務,因爲我需要x64和x86支持。使用MinGW-w64和Boost.Build構建C++環境

雖然我在設置構建環境時遇到了問題。我的項目目前使用Boost C++庫,並且使構建過程更簡單我也在項目中使用Boost.Build(因爲它使得集成變得簡單)。

在MSVC這是好的,因爲我可以做在命令行以下操作:

b2 toolset=msvc address-model=32 # compile as 32-bit 
b2 toolset=msvc address-model=64 # compile as 64-bit 

的MinGW-W64是使這種「有問題」,因爲在32位和64位的工具鏈容納在單獨的目錄中。 (分別爲C:\ MinGW32和C:\ MinGW64)。

是否有可能以某種方式設置Boost.Build,以便根據地址模型標誌選擇正確的工具鏈?如果不是,我的下一個最佳選擇是什麼?

編輯:

如果有幫助,我使用的是rubenvb 4.6.3-1從MinGW的-W64網站建設「個人構建」文件夾中(我使用這些構建特別是我想嘗試讓我的代碼解析 - 但不能編譯 - 在鐺下)。

編輯:

一個解決方案我還以爲會是「手動」設定的路徑指向編譯之前正確的工具鏈,然而,這增加了複雜性的一個額外層到我的構建過程中,我會喜歡避免。理想情況下,我希望它像MSVC一樣簡單,但我明白這可能是不可能的。在最壞的情況下,我假設我剛剛建議的工作,並且我只需添加腳本以在調用Boost.Build之前正確設置PATH。這意味着硬編碼路徑,但我不想這麼做...

回答

5

喲可以通過添加一個工具集要求(與toolset.add-requirements規則)基於一組匹配屬性來選擇任何Boost.Build工具集。在某些工具集中有內置支持,如darwin.jam(Xcode),但不幸的是,我們還沒有將其添加到gcc工具集。但是在聲明工具集時,您可以在user-config.jam中使用相同的最小代碼。對於你區分它可能是這樣的:

import toolset ; 

using gcc : gcc-4.6.3~32 : /path/to/32bit/mingw/gcc ; 
using gcc : gcc-4.6.3~64 : /path/to/64bit/mingw/gcc ; 

# Add a global target requirements to "choose" the toolset based on the address model. 
toolset.add-requirements <toolset>gcc-4.6.3~32:<address-model>32 ; 
toolset.add-requirements <toolset>gcc-4.6.3~64:<address-model>64 ; 

這有增加了給定的條件要求所有目標的效果。這對於根據需要爲特定的已聲明工具集選擇特定目標具有效果。

..Forgot提..即使這是創建兩個不同的工具集,聲明的默認還是動態選擇。人會使用通常的命令行:

b2 toolset=gcc address-model=64 

要使用的64位的mingw編譯器。

3

由於MinGW二進制文件有不同的名稱,您應該能夠將booth目錄包含到路徑中,然後在jam中添加兩個不同的工具集配置文件,您可以在其中指定二進制文件的確切名稱(不包括路徑)。

在配置文件中添加下列基於使用gcc格式

:[版]:[C++ - 編譯指令]:[編譯選項];

using gcc : 32 : mingw-w32-1.0-bin_i686-mingw ; 
using gcc : 64 : mingw-w64-1.0-bin_i686-mingw ; 

然後,您應該能夠調用B2是這樣的:

b2 toolset=gcc-32 
bt toolset=gcc-64 
+0

有什麼辦法可以在工具鏈中不添加前綴的情況下做類似的事情嗎?我想使用「默認」工具鏈名稱,並使用地址模型標誌檢測到32/64位部分。 – RaptorFactor 2012-01-11 11:55:39

+0

例如b2 toolset = gcc address-model = 32 – RaptorFactor 2012-01-11 11:55:55

+0

不是我所知道的,address-model顯然不支持作爲mingw-gcc的參數。請問爲什麼使用address-model = 32在你的情況下更好? – Kristofer 2012-01-11 12:05:21

0

的MinGW-W64可以構建32位和64位二進制文​​件。

我使用tdm-mingw和mingw64 toolchan,只通過-m32-m64鏈接器/編譯器來選擇版本。默認情況下,構建64位二進制文​​件。

+0

不幸的是,並非所有的MinGW -w64 build可以做到這一點,正如我的問題所述,我使用rubenvb構建的不是multilib,所以我有兩個安裝,一個用於32位工具鏈,一個用於64位工具鏈。 64位工具鏈只能構建64位二進制文​​件,而32位工具鏈只能構建32位二進制文​​件。 – RaptorFactor 2012-01-11 11:54:34