C++ 使用v110_xp平台工具集在Visual Studio 2012下构建boost
是否可以使用“v110_xp”平台工具集的b2.exe工具自动构建当前的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 目前似
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默认路径):
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