2012-01-09 58 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