2014-01-21 71 views
0

我知道新工具集不受boost的支持,但我想尝试使用它来构建Boost。我天真地尝试过使用Boost构建系统和选项toolset=msvc-12.0-ctp,但它不起作用。我相信这是有可能的,因为Boost 1.55正式支持Visual Studio 2013(msvc-12.0),并且在两个版本之间几乎没有发生重大变化。如何使用Visual Studio 2013 CTP构建Boost 1.55 2013年11月

我的动机是我需要CTP的某些功能,所以我自己的应用程序将与C++版本的msvc编译器一起编译。我担心仅仅使用原始的2013编译器编译Boost会导致Boost和我自己的应用程序之间的二进制不兼容。 Stephen T. Lavavej himself doesn't guarantee binary compatibility

- 重新使用MSVC 2013年11月CTP的MSVC 2013内置

因为这是编译器只是加速二进制文件的任何机会,也许可以与混合和匹配脱身。但我不会推荐它。

有关如何解决这个问题的想法?提前致谢。

回答

4

请注意,我没有在Visual Studio 2013 11月CTP中构建Boost,因此进一步的解释纯粹是理论上的。

经过一番谷歌搜索和尝试,最后,我做到了。所以,算法是:从颠覆

  1. 退房最新升压(可能是,它可以与发行的发行做,但我没试过)

    svn co http://svn.boost.org/svn/boost/trunk boost-trunk 
    
  2. 指定自定义路径在user-config.jam编译文件,该文件位于%BOOST_HOME%/tools/build/v2/(其中%BOOST_HOME%是您签出你的发行版的路径):

    • 添加一行:

    using msvc : 12.1 : "C:/Program Files (x86)/Microsoft Visual C++ Compiler Nov 2013 CTP/bin/cl" ;

    • 您可以使用任意字符串代替12.1,只是把这里的东西来区分你的工具集后,调用b2

    • 不要忘记之前把空间和在冒号和分号之前,还使用斜杠/或双反斜杠\\而不是反斜杠\。见user-config.jam文件的注释说明

    • 确保你没有#在该行的开头(即不评论)

  3. 运行VS2013 x86 Native Tools Command prompt或手动运行cmd.exe然后通过调用"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" -x86来设置环境。如果需要,请更改x86x64

  4. 到CTP编译器添加路径PATH变量:

    set PATH=C:/Program Files (x86)/Microsoft Visual C++ Compiler Nov 2013 CTP/bin;%PATH% 
    
  5. 检查以CTP编译器路径去之前路径释放一个:

    echo %PATH% 
    
  6. 转到%BOOST_HOME%和运行b2 toolset=msvc-12.1 ...<other params go there>...

  7. 在进程管理器或ProcessExplorer检查b2调用CTP编译器,而不是释放一个

  8. 不幸的是,并非所有的图书馆建立的罚款。有一些编译错误。

参见:

希望它可以帮助的this page。快乐的建筑! =)

+1

一个很好的答案。干杯!我得到Boost与2013年11月CTP编译。我想要x64输出,这导致了第2步中的下列小改动:''C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ vcvarsall.bat“x86_amd64”。请注意,我使用选项'x86_amd64'而不是简单的'-x64'。首先,它不适用于前缀短划线。其次,编译器'cl.exe'是一个x86应用程序,因此必须相应地设置变量。选项'x86_amd64'选择x86编译器并指示它交叉编译为x64 [[source](http://msdn.microsoft.com/zh-cn/library/x4d2c09s.aspx)]。 –

+0

很高兴这很有帮助。我认为通过'address-model ='参数控制输出平台更容易到'b2'。有了'Visual Studio 12.0 \ VC \'的路径,它会以某种方式自动完成所有的工作,所以不需要针对不同编译器环境的特殊设置。 – Drop

+0

@FrederikAalund我无法建立一些库(特别是locale,log,random,unit_test等)。如果你能成功地构建它们,你能不能把你的解决方案作为一个自我回答的问题发布在SO上? – Drop