在 Windows 上将 32 位和 64 位的 Boost 构建到同一个文件夹中

Building Boost for 32-bit and 64-bit on Windows into the same folder

我正在寻找 config.jam 的简单设置,它将使用 MSVC 在 Windows 上为 x86 和 x64 构建 Boost(1.60 或更高版本)。理想情况下使用对 b2 的单个调用——我知道它应该支持从单个调用生成多个输出。对 x86 和 x64 有两个单独的调用是可以的,但不是首选。

我想要的另一件事是让它将两组库输出到 same 文件夹中。显然,它们需要有不同的名称,所以我希望将 -x64 放在 x64 二进制文件名称中的某个位置。而且它仍然需要 auto-link,所以我不能手动重命名它们,它必须是构建系统支持的东西。这部分是必不可少的。

我已经 read that b2 provides a --buildid parameter and the auto-link supports a BOOST_LIB_BUILDID 定义允许插入这样的自定义关键字,但我不确定如何使用它们。是否可以在 config.jam 中指定两个构建,一个有构建 ID,一个没有(运行 它们都通过一次调用 b2),或者这真的需要两次单独的调用吗?

有人知道魔语吗?

我想那不是人们会做的事情。

我只接受了 运行 命令两次;作为记录,我的工作咒语是这样的:

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 文件夹的内容。然后在构建软件时将此代码段添加到项目文件中(通过 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 在技术上是可选的,但如果您编译的 DLL 在其导出的 API 中具有 Boost 类型,则它有助于提高兼容性。您仍然需要确保它们都已编译不过,使用相同的编译器和 Boost 版本。)