【问题标题】:Building Boost for 32-bit and 64-bit on Windows into the same folder将 Windows 上 32 位和 64 位的 Boost 构建到同一个文件夹中
【发布时间】:2017-06-11 07:30:33
【问题描述】:
我正在寻找一个简单的 config.jam 设置,它将使用 MSVC 在 Windows 上为 x86 和 x64 构建 Boost(1.60 或更高版本)。理想情况下使用对 b2 的单个调用——我知道它应该支持从单个调用生成多个输出。对 x86 和 x64 分别调用两次是可以的,但不是首选。
我想要的另一件事是将两组库输出到 same 文件夹中。显然,它们需要有不同的名称,所以我希望将 -x64 放在 x64 二进制文件的名称中。而且它仍然需要自动链接,所以我不能手动重命名它们,它必须是构建系统支持的东西。这部分是必不可少的。
我有read,b2 提供了一个--buildid 参数,并且自动链接支持BOOST_LIB_BUILDID 定义,它允许插入这样的自定义关键字,但我不确定如何使用它们。是否可以在 config.jam 中指定两个构建,一个带有 buildid,一个不带 buildid(并通过一次调用 b2 来运行它们),还是真的需要两个单独的调用?
有谁知道神奇的词吗?
【问题讨论】:
标签:
c++
windows
boost
boost-build
【解决方案1】:
我想那不是人们会做的事。
我已经决定只运行两次命令;作为记录,我的工作咒语是这样的:
bootstrap
b2 -j8 --build-dir=build toolset=msvc-14.0 variant=debug,release link=shared threading=multi runtime-link=shared stage
b2 -j8 --build-dir=build --buildid=x64 toolset=msvc-14.0 variant=debug,release link=shared threading=multi runtime-link=shared address-model=64 stage
这会将 x86 和 x64 库放入stage\lib;对于实际编译应用程序,只需要此文件夹和 boost 文件夹的内容。然后在构建软件时,将这个 sn-p 添加到项目文件中(通过 props 文件):
<PropertyGroup>
<BoostIncludeDir>path\to\include\boost\</BoostIncludeDir>
<BoostLibDir>path\to\lib\</BoostLibDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(BoostIncludeDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions Condition="'$(Platform)'=='x64'">BOOST_LIB_BUILDID=x64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(BoostLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
(BOOST_ALL_DYN_LINK 在技术上是可选的,但如果您在其导出的 API 中编译具有 Boost 类型的 DLL,它有助于提高兼容性。您仍然需要确保它们都使用相同的编译器和 Boost 版本进行编译,不过。)