将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进行两个单独的调用是可以的,但不是首选。
我想做的另一件事是让它将两组库输出到相同的文件夹中。显然,它们需要有不同的名称,所以我希望将-x64
放在x64二进制文件的名称中。它仍然需要自动链接,所以我不能只是手动重命名它们,它必须是构建系统支持的。这一部分至关重要。
我读到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库都放入stagelib
;对于实际编译应用程序,只需要该文件夹和CCD_ 5文件夹的内容。然后,当构建软件时,这个片段被添加到项目文件中(通过道具文件):
<PropertyGroup>
<BoostIncludeDir>pathtoincludeboost</BoostIncludeDir>
<BoostLibDir>pathtolib</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 1.67开始,不再需要使用自定义构建id或构建两次;您可以在一个咒语中为32位和64位构建:
bootstrap
b2 -j8 --build-dir=build toolset=msvc-14.1 cxxflags="-std:c++17" variant=debug,release link=shared threading=multi runtime-link=shared address-model=32,64 stage
props文件本质上是相同的,但不再需要定义BOOST_LIB_BUILDID
。
然而,如果你出于其他原因想要多个自定义构建,那么公认的答案可能仍然很有意思。
- 如何在目录及其子文件夹中构建文件名字符串向量?
- opencv4.1.2构建后要清理哪些文件和文件夹
- 如何为特定的构建风格设置 cpp 文件夹
- 如何在 CMake 中构建其他文件夹
- 如何在sublime构建文件中指定$HOME文件夹
- 将Windows上32位和64位的Boost构建到同一文件夹中
- 构建块的Cmake(文件夹包含源)
- Robocopy在项目中使用具有英语以外的其他名称的文件夹中时会产生构建错误
- 如何使用命名空间构建文件夹
- 如何更改我的生成文件以构建到单独的文件夹中
- 将两个VS2010 C++项目构建到同一输出文件夹中
- 在应用程序中使用不同的文件夹构建makefile
- Qmake Qt:将头文件移动到构建文件夹
- 为什么必须在 Linux 系统上"installed" uuid.h 才能构建许多C++程序,而不仅仅是放入 include 或 lib 文件夹
- 在VirtualBox的共享文件夹中构建符号链接共享库
- 如何在 rstudio 上为在子目录内的 src 文件夹中使用 C/C++ 文件的包构建和加载共享库
- 在调用 cmake 之前删除构建文件夹中的所有内容是否合理
- MSVC10 /MP不是在项目中跨文件夹构建多核的
- Android NDK:在jni/文件夹下直接添加了一个新的库模块后构建
- 如何构建 OpenGL + GLEW + GLFW 程序,以便在带有 exe 的文件夹中不需要 glfw3.dll?