在 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 版本。)
我正在寻找 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 版本。)