2017-01-25 54 views
3

我正在寻找一个config.jam的简单安装程序,它将在使用MSVC的Windows上为x86和x64构建Boost(1.60或更高版本)。理想情况下,对b2使用单个调用 - 我知道它应该支持通过一次调用生成多个输出。有两个单独的x86和x64调用是好的,但不是首选。在Windows上将32位和64位Boost升级到同一文件夹

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

我已经read b2提供了--buildid参数和自动链接支持定义允许插入这样的自定义关键字,但我不确定如何使用它们。是否有可能在config.jam中指定两个版本,一个是buildid,一个是没有的(并且只需对b2进行一次调用即可运行它们),还是需要两次单独的调用?

有谁知道魔法字?

回答

3

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

我已经解决了只是运行命令两次;备案工作我的咒语是这样的:

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文件夹。然后(通过道具文件)构建这个片段被添加到项目文件的软件时:

<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版本编译的。)

相关问题