[英]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默認路徑):
根據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%
根據另一個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
構建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編譯器選項)
看起來您可以使用平台工具集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.