使用MinGW-w64和Boost.Build构建C ++

时间:2012-01-09 00:13:11

标签: c++ windows boost mingw boost-build

我目前正在将我的一个项目移植到GCC,我正在使用MinGW-w64项目完成此任务,因为我需要x64和x86支持。

我在设置构建环境时遇到了问题。我的项目目前使用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,以便根据地址模型标志选择正确的工具链?如果没有,我的下一个最佳选择是什么?

编辑:

如果有帮助,我在MinGW-w64网站的“Personal Builds”文件夹中使用rubenvb 4.6.3-1版本(我特别使用这些版本,因为我希望尝试让我的代码解析 - 但不能编译 - 在Clang下。)

编辑:

我刚才想到的一个解决方案是在编译之前“手动”将PATH设置为指向正确的工具链,但是这会给我的构建过程增加一层额外的复杂性,我想避免。理想情况下,我希望它像MSVC一样简单,但我知道这可能是不可能的。在最坏的情况下,我假设我刚刚建议的工作,我只需要在调用Boost.Build之前添加脚本来正确设置PATH。这意味着硬编码路径,我不想做...

3 个答案:

答案 0 :(得分: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 ;

这具有将给定的条件要求添加到所有目标的效果。其中包含根据需要为特定声明的工具集选择特定目标的效果。

..忘了提..虽然这是创建两个不同的工具集声明,但默认仍然是动态选择的。可以使用通常的命令行:

b2 toolset=gcc address-model=64

使用64位mingw编译器。

答案 1 :(得分:3)

由于MinGW二进制文件具有不同的名称,因此您应该能够将booth目录包含在路径中,然后在jam配置文件中添加两个不同的工具集,您可以在其中指定二进制文件的确切名称(不包括路径)。 / p>

在配置文件中,根据格式

添加以下内容
  

使用gcc:[version]:[c ++ - compile-command]:[编译器选项];

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

答案 2 :(得分:0)

MinGW-w64可以构建32位和64位二进制文​​件。

我使用tdm-mingw和mingw64 toolchan,只将-m32-m64传递给链接器/编译器以选择版本。默认情况下,64位二进制文​​件是构建的。