簡體   English   中英

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

[英]Building boost under Visual Studio 2012 with v110_xp platform toolset

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

看起來目前沒有針對此方案的命令行支持。 這是正確的嗎?

這些說明假定您安裝了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

來自@Paul和@Kanchari的答案對我很有幫助,直到Boost 1.55來了。 之后我不得不做出額外的調整。 所以我將@Kanchari的答案概括為簡單的shell腳本,沒有Boost分布式修改。 GitHub上查找完整腳本,這是從控制台構建手冊的步驟(x86版本,MSVS默認路徑):

  1. 在控制台中解壓縮boost和goto根文件夾
  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說你可以定義什么WINVER_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 (通過.cpp中的#define或/ D編譯器選項)

看起來您可以使用平台工具集v110構建Boost,並在使用平台工具集v110_xp構建的應用程序中使用它們。 請參閱: vs2012工具集兼容性

不過,我仍然需要對此進行測試。 也許其他人對此有更多的經驗。

如果您在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庫工作得很好(我們使用了自動鏈接功能)

是一個指向boost(1.56,但在1.57中相同)的Windows配置標頭的鏈接,用於設置xp兼容模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM