c++ - 将 Windows 上的 32 位和 64 位 Boost 构建到同一文件夹中

标签 c++ windows boost boost-build

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

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

我已经 read b2 提供了一个 --buildid 参数并且自动链接支持 BOOST_LIB_BUILDID定义哪个允许插入这样的自定义关键字,但我不确定如何使用它们。是否可以在 config.jam 中指定两个构建,一个有 buildid,一个没有(并通过一次调用 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 在技术上是可选的,但如果您正在编译在其导出的 API 中具有 Boost 类型的 DLL,它有助于 boost 兼容性。您仍然需要确保它们都使用相同的编译不过,编译器和 Boost 版本。)

关于c++ - 将 Windows 上的 32 位和 64 位 Boost 构建到同一文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41863103/

相关文章:

c++ - 创建一个容器来存储多种类型

c++ - 有没有办法模拟 QSqlQuery?

windows - 使用命令行禁用以太网连接?

C++ - 我需要哪些库或命令行程序来创建一个获取 AVI 文件并将其刻录到 DVD 的程序?

c++ - 将 RAII 与工厂一起使用,将对指针的引用作为输入

c++ - 如何正确使用 std::queue 作为模板类中的元素?

c - Linux C 上的 HINTERNET InternetOpenUrl()

c++ - 使用 boost property_tree 解析 xml 文件并将选定的内容放入 std::map

c++ - 重复特定的正则表达式模式

c++ - Boost:在 vector 中存储指向分布的指针