是否可以使用 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
看起来目前没有针对此方案的命令行支持。这是对的吗?
答案 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默认路径):
根据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%
根据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
Build Boost构建系统
call bootstrap.bat
使用b2
和您的项目参数构建Boost库。例如 - 调试多线程静态库。
b2 toolset=msvc-11.0 %XP_TOOLSET_DEFINES% ^
variant=debug link=static threading=multi runtime-link=shared
重要提示:
在主项目中,您必须(除了设置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兼容模式。