3

是否可以使用“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

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

4

4 回答 4

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.构建.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
于 2013-10-01T11:49:09.260 回答
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. 根据另一个MSDN集为 Win XP 定义。MSDN 说明了您可以定义的内容WINVERor _WIN32_WINNT,但是,以防万一,我同时使用两者。在这里小心翼翼^

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

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

    b2 toolset=msvc-11.0 %XP_TOOLSET_DEFINES% ^
    variant=debug link=static threading=multi runtime-link=shared 
    

重要提示

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

于 2014-02-18T13:21:43.513 回答
2

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

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

于 2013-08-12T15:46:07.093 回答
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++ 项目时,该工具集使用了许多外部库,其中包括 boost,最初可执行文件无法在 Win XP 上运行。经过一番挖掘,我们发现问题不是新编译的boost库(使用msvc 12),而是其他一些外部库,我们必须使用v120_xp工具集重新编译。使用 msvc 12 编译的 boost 库运行良好(我们使用了它的自动链接功能)

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

于 2015-10-27T15:10:38.767 回答