使用v110_xp平台工具集在Visual Studio 2012下构建增强功能

时间:2013-08-05 09:23:14

标签: c++ visual-c++ boost visual-studio-2012 boost-build

是否可以使用 b2.exe 工具为“v110_xp”平台工具集自动构建当前的boost库?

我正在寻找类似的东西:

set MSVC_TOOLSET=msvc-11.0_xp
set PLATFORM_TOOLSET=v110_xp

b2 --build-dir="..\32\%PLATFORM_TOOLSET%\build" toolset=%MSVC_TOOLSET% --stagedir="..\32\%PLATFORM_TOOLSET%\lib\Debug" variant=debug

看起来目前没有针对此方案的命令行支持。这是对的吗?

4 个答案:

答案 0 :(得分:4)

这些说明假设您安装了Visual Studio 2012或Visual Studio 2012 Express版以及boost 1.54。

更改boost文件夹中的以下文件的内容(已下载并解压缩)

boost_1_54_0\tools\build\v2\tools中更改以下文件:

<强> 1。 msvc.jam

变化:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console ;

到32位:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console,5.01 ;

或64位的这个:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console,5.02 ;

<强> 2。 msvc.py

变化:

toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console'])

到32位:

toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console,5.01'])

或64位的这个:

toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console,5.02'])

boost_1_54_0\tools\build\v2\engine中更改以下文件:

<强> 1。的build.bat

变化:

if EXIST "%ProgramFiles%\Microsoft Visual Studio 11.0\VC\VCVARSALL.BAT" (

为:

if EXIST "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\VCVARSALL.BAT" (

在读取:Skip_VC11的行上方,更改:

set "BOOST_JAM_CC=cl /nologo /RTC1 /Zi /MTd /Fobootstrap/ /Fdbootstrap/ -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib"

为:

set "BOOST_JAM_CC=cl /nologo /RTC1 /Zi /MTd /Fobootstrap/ /Fdbootstrap/ /D _USING_V110_SDK71_ -DNT -DYYDEBUG -wd4996 kernel32.lib advapi32.lib user32.lib"

打开标准命令提示符并键入以下命令:

call "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%

set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%

set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%

cd <path to boost_1_54_0>

bootstrap

对于32位,使用命令:

b2 toolset=msvc-11.0 variant=debug,release link=shared runtime-link=shared address-model=32

或64位:

b2 toolset=msvc-11.0 variant=debug,release link=shared runtime-link=shared address-model=64

要编译版本和调试版本的任何示例,请执行以下操作:

打开标准命令提示符并键入以下命令:

call "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%

set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%

set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%

cd到示例目录,即boost_1_54_0\libs\test\tools\console_test_runner

<path to boost>\boost_1_54_0\bjam.exe --v2 toolset=msvc-11.0 variant=debug,release link=shared threading=multi runtime-link=shared

答案 1 :(得分:3)

来自@Paul和@Kanchari的答案对我很有帮助,直到Boost 1.55来了。之后我不得不做出额外的调整。所以我将@Kanchari的答案概括为简单的shell脚本,没有Boost分布式修改。 在GitHub上查找完整脚本,这是从控制台构建手册的步骤(x86版本,MSVS默认路径):

  1. 在控制台中解压缩boost和转到根文件夹
  2. 根据MSDN

    ::setup environment
    call "%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat"
    
    ::setup paths
    set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Include;%INCLUDE%
    set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Bin;%PATH%
    set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\7.1A\Lib;%LIB%
    
    ::cl and linker settings
    set CL=/D_USING_V110_SDK71_ %CL%
    set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%
    
  3. 根据Win XP的另一个MSDN集定义。 MSDN说明了您可以定义WINVER_WIN32_WINNT的内容,但是,以防万一,我同时使用它们。请谨慎使用^

    set XP_TOOLSET_DEFINES=define=WINVER=0x0501 define=_WIN32_WINNT=0x0501 ^
    define=NTDDI_VERSION=0x05010000 define=PSAPI_VERSION=1
    
  4. Build Boost构建系统

    call bootstrap.bat
    
  5. 使用b2和您的项目参数构建Boost库。例如 - 调试多线程静态库。

    b2 toolset=msvc-11.0 %XP_TOOLSET_DEFINES% ^
    variant=debug link=static threading=multi runtime-link=shared 
    
  6. 重要提示

    在主项目中,您必须(除了设置v110_xp工具集)还要定义WINVER_WIN32_WINNT(在.cpp中通过#define或/ D编译器选项)

答案 2 :(得分:2)

看起来您可以使用平台工具集v110构建Boost,并在使用平台工具集v110_xp构建的应用程序中使用它们。请参阅:vs2012 toolset compatibility

但是,我仍然需要对此进行测试。也许其他人对此有更多的经验。

答案 3 :(得分:1)

如果您在Visaul C ++项目中使用boost库,我相信您不需要使用v110_xp工具集重新编译boost。您只需确保在使用标题时, WINVER和_WIN32_WINNT设置为正确的版本。如果在编译项目时未设置这些宏,则BOOST(至少1.57)默认使用XP兼容模式(以及SDK 7.1等)。

VS 2013和v120_xp工具集也是如此。当我们使用v120_xp工具集从VS 2013编译我们的VC ++项目时,v120_xp工具集使用了许多外部库,在它们之间加强,最初可执行文件不能在Win XP上运行。经过深入挖掘后,我们发现问题不是新编译的boost库(使用msvc 12),而是其他一些外部库,我们不得不用v120_xp工具集重新编译。使用msvc 12编译的boost库工作正常(我们使用其自动链接功能)

Here是一个指向boost(1.56,但在1.57中相同)的Windows配置标头的链接,用于设置xp兼容模式。