C++ 使用v110_xp平台工具集在Visual Studio 2012下构建boost

C++ 使用v110_xp平台工具集在Visual Studio 2012下构建boost,c++,visual-c++,boost,visual-studio-2012,boost-build,C++,Visual C++,Boost,Visual Studio 2012,Boost Build,是否可以使用“v110_xp”平台工具集的b2.exe工具自动构建当前的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 目前似

是否可以使用“v110_xp”平台工具集的b2.exe工具自动构建当前的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

目前似乎没有针对该场景的命令行支持。是否正确?

看起来您可以使用平台工具集v110构建Boost,并在使用平台工具集v110\u xp构建的应用程序中使用它们。见:


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

这些说明假定您已经安装了Visual Studio 2012或Visual Studio 2012 Express edition以及boost 1.54

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

boost\u 1\u 54\u 0\tools\build\v2\tools
中更改以下文件:

1。msvc.jam

更改:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console ;
toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console'])
if EXIST "%ProgramFiles%\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"
致:

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

调用“%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat”

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDK\Windows\7.1A\INCLUDE;%包括%

set PATH=%ProgramFiles(x86)%\Microsoft SDK\Windows\7.1A\Bin;%路径%

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

cd

bootstrap

对于32位,请使用以下命令:

b2 toolset=msvc-11.0 variant=debug,release link=shared runtime-link=shared address-model=32
或对于64位:

toolset.flags msvc LINKFLAGS <user-interface>console : /subsystem:console,5.02 ;
toolset.flags('msvc', 'LINKFLAGS', ['<user-interface>console'], ['/subsystem:console,5.02'])
b2 toolset=msvc-11.0 variant=debug,release link=shared runtime-link=shared address-model=64
要编译发行版和调试版的任何示例,请执行以下操作:

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

调用“%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\VC\bin\vcvars32.bat”

set INCLUDE=%ProgramFiles(x86)%\Microsoft SDK\Windows\7.1A\INCLUDE;%包括%

set PATH=%ProgramFiles(x86)%\Microsoft SDK\Windows\7.1A\Bin;%路径%

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

cd到示例目录,即
boost\u 1\u 54\u 0\libs\test\tools\console\u test\u 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
\boost\u 1\u 54\u 0\bjam.exe--v2 toolset=msvc-11.0 variant=debug,release link=shared threading=multi-runtime link=shared

来自@Paul和@Kanchari的答案对我来说很有效,直到Boost 1.55出现。在那之后,我不得不做额外的调整。因此,我将@Kanchari答案推广到了简单的shell脚本,该脚本无需修改Boost发行版。 查看上的完整脚本,以下是从控制台生成手册的步骤(x86版本,MSVS默认路径):

  • 在控制台中解压缩boost和goto根文件夹
  • 根据:

  • 根据WinXP的另一套定义。MSDN说明了您可能定义的
    WINVER
    \u WIN32\u WINNT
    ,但为了以防万一,我同时使用了这两种定义。在这里小心地使用
    ^

    set XP_TOOLSET_DEFINES=define=WINVER=0x0501 define=_WIN32_WINNT=0x0501 ^
    define=NTDDI_VERSION=0x05010000 define=PSAPI_VERSION=1
    
  • 构建推进构建系统

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

    b2 toolset=msvc-11.0 %XP_TOOLSET_DEFINES% ^
    variant=debug link=static threading=multi runtime-link=shared 
    
  • 重要注意事项


    在主项目中,除了(Vo.1xxP工具集)之外,还必须定义<代码> Wiver < /C> >或<>代码> Win 32,WiNT(由<代码>定义为< P>如果您在Visual C++项目上使用Boost库,我相信您不需要用V1XXP工具集重新编译Boost。您只需确保在使用标题时,您的WINVER和_WIN32_WINNT设置为正确的版本。如果在编译项目时未设置这些宏,BOOST(至少1.57)在默认情况下使用XP兼容模式(以及SDK 7.1等)

    VS 2013和v120_xp工具集也是如此。当我们使用v120_xp工具集从VS2013编译VC++项目时,该工具集使用了许多外部库,其中包括boost,最初可执行文件没有在Win xp上运行。经过深入研究,我们发现问题不在于新编译的boost库(使用msvc 12),而是其他一些外部库,我们必须使用v120_xp工具集重新编译它们。用msvc 12编译的boost库工作得很好(我们使用了它的自动链接功能)


    是指向设置xp兼容模式的boost(1.56,但在1.57中相同)windows配置标题的链接。

    这也是关于的讨论的结果。我已经做了一些测试,看起来不错。据我所知,这只适用于静态链接。如果使用boost_thread*.dll所需的动态链接,则需要使用以下答案中所述的相应设置重新构建boost。bootstrap.bat在VC2013上使用这些指令失败
    <path to boost>\boost_1_54_0\bjam.exe --v2 toolset=msvc-11.0 variant=debug,release link=shared threading=multi runtime-link=shared
    
    ::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%
    
    set XP_TOOLSET_DEFINES=define=WINVER=0x0501 define=_WIN32_WINNT=0x0501 ^
    define=NTDDI_VERSION=0x05010000 define=PSAPI_VERSION=1
    
    call bootstrap.bat
    
    b2 toolset=msvc-11.0 %XP_TOOLSET_DEFINES% ^
    variant=debug link=static threading=multi runtime-link=shared