Можно ли сделать автоматическую сборку текущих буст-библиотек с b2.exe инструмент для набора инструментов платформы «v110_xp»?
Я ищу что-то вроде этого:
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
Похоже, что в настоящее время нет поддержки командной строки для этого сценария. Это правильно?
Похоже, вы можете собрать Boost с помощью набора инструментов платформы v110 и использовать его в своем приложении, которое вы создаете с помощью набора инструментов платформы v110_xp. Увидеть: vs2012 совместимость с наборами инструментов
Я все еще должен проверить это, хотя. Возможно, кто-то еще имеет больше опыта с этим.
В этих инструкциях предполагается, что у вас установлена Visual Studio 2012 или Visual Studio 2012 Express, а также версия 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%
перейдите в каталог образца, т.е. 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 на простой сценарий оболочки, который работает без модификаций 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
Build Boost система сборки
call bootstrap.bat
Build Boost библиотеки с b2
и ваш проект params. Например — отладка многопоточных статических библиотек.
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)
Если вы используете библиотеки boost в проекте Visaul C ++, я считаю, что вам не нужно перекомпилировать boost с набором инструментов v110_xp. Вы просто должны убедиться, что при использовании заголовков ваш WINVER и _WIN32_WINNT установлены на правильные версии. BOOST (по крайней мере, 1.57) по умолчанию использует режим совместимости с XP (и SDK 7.1 среди прочего), если вы не устанавливаете эти макросы при компиляции своих проектов.
Это также касается VS 2013 и набора инструментов v120_xp. Когда мы скомпилировали наши проекты VC ++ из VS 2013 с помощью набора инструментов v120_xp, в котором использовалось много внешних библиотек, среди которых было значительное увеличение, первоначально исполняемые файлы не работали на Win XP. Много покопавшись, мы обнаружили, что проблема не в недавно скомпилированных библиотеках boost (с msvc 12), а в какой-то другой внешней библиотеке, которую нам пришлось перекомпилировать с помощью набора инструментов v120_xp. Библиотеки boost, скомпилированные с msvc 12, работали просто отлично (мы использовали его функцию автосоединения)
Вот является ссылкой на заголовок конфигурации Windows Boost (1.56, но такой же в 1.57), который устанавливает режим совместимости с xp.