使用MinGW-w64和Boost.Build的C++构建环境
C++ Build Environment using MinGW-w64 and 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
由于32位和64位工具链位于不同的目录中,MinGW-w64使这一点变得"有问题"。(分别为C:\MinGW32和C:\MinGW64)。
是否可以设置Boost.Build,使其根据地址模型标志选择正确的工具链?如果没有,我的下一个最佳选择是什么?
编辑:
如果有帮助的话,我会在"个人构建"文件夹中使用MinGW-w64网站上的ruenvb 4.6.3-1构建(我特别使用这些构建,因为我希望尝试在Clang下解析而不是编译我的代码)。
编辑:
我刚刚想到的一个解决方案是在编译之前"手动"设置PATH以指向正确的工具链,但这会给我的构建过程增加一层额外的复杂性,我希望避免这种情况。理想情况下,我希望它像MSVC一样简单,尽管我知道这可能是不可能的。在最坏的情况下,我认为我刚才的建议会起作用,我只需要添加脚本来正确设置PATH,然后再调用Boost.Build。这意味着硬编码一个路径,但我不想这样做…
Yo可以通过添加工具集需求(使用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编译器。
由于MinGW二进制文件有不同的名称,您应该能够将booth目录包括在路径中,然后在jam配置文件中添加两个不同的工具集,在其中指定二进制文件的确切名称(不包括路径)。
在配置文件中,根据格式添加以下内容
使用gcc:[version]:[c++-comple命令]:[compiler选项];
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
MinGW-w64可以构建32位和64位二进制文件。
我将tdm-mingw与mingw64 toolchan一起使用,并且只将-m32
或-m64
传递给链接器/编译器以选择版本。默认情况下,构建64位二进制文件。
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 构建一个由C和C++文件组成的库
- llvm构建器向基本块添加终止符
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 如何跨平台将二进制资源构建到程序中?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 如何解决 Ninja c++ 构建和执行问题
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 用CMake构建C++协议
- Mingw-64 在构建和安装后不会编译 openCV 代码