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

时光总嘲笑我的痴心妄想 提交于 2019-12-07 15:00:42

问题


I'm looking a simple setup for the config.jam which will build Boost (1.60 or later) for both x86 and x64 on Windows using MSVC. Ideally using a single call to b2 -- I know that it's supposed to support generating multiple outputs from a single call. Having two separate calls for x86 and x64 is ok but not preferred.

The other thing I would like is to have it output both sets of libraries into the same folder. Obviously then they need to have different names, so I would like it to put -x64 somewhere in the names of the x64 binaries. And it still needs to auto-link, so I can't just rename them manually, it has to be something that the build system supports. This part is essential.

I've read that b2 provides a --buildid parameter and the auto-link supports a BOOST_LIB_BUILDID define which permits insertion of a custom keyword like this, but I'm not sure exactly how to use them. Is it possible to specify two builds in the config.jam, one with a buildid and one without (and run them both with a single call to b2), or does this really require two separate calls?

Does anyone know the magic words?


回答1:


I guess that's just not a thing people do, then.

I've settled for just running the command twice; for the record my working incantation was this:

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

This puts both x86 and x64 libraries into stage\lib; for actually compiling applications only the contents of this folder and the boost folder are required. Then when building the software this snippet is added to project files (via a props file):

<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 is technically optional, but it helps improve compatibility if you are compiling DLLs that have Boost types in their exported API. You still need to make sure that they're all compiled with the same compiler and Boost versions, though.)



来源:https://stackoverflow.com/questions/41863103/building-boost-for-32-bit-and-64-bit-on-windows-into-the-same-folder

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!