Повышение производительности в Visual Studio 2012 с помощью набора инструментов платформы v110_xp

Можно ли сделать автоматическую сборку текущих буст-библиотек с 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

Похоже, что в настоящее время нет поддержки командной строки для этого сценария. Это правильно?

3

Решение

Похоже, вы можете собрать Boost с помощью набора инструментов платформы v110 и использовать его в своем приложении, которое вы создаете с помощью набора инструментов платформы v110_xp. Увидеть: vs2012 совместимость с наборами инструментов

Я все еще должен проверить это, хотя. Возможно, кто-то еще имеет больше опыта с этим.

2

Другие решения

В этих инструкциях предполагается, что у вас установлена ​​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
4

Ответы от @Paul и @Kanchari хорошо работали для меня, пока не появился Boost 1.55. После этого мне пришлось сделать дополнительные настройки. Поэтому я обобщил ответ @Kanchari на простой сценарий оболочки, который работает без модификаций Boost-дистрибутива.
Ищите полный сценарий на GitHub, Вот шаги для руководства по сборке с консоли (версия x86, пути MSVS по умолчанию):

  1. Распакуйте в консоль boost и goto root
  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. Build Boost система сборки

    call bootstrap.bat
    
  5. 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)

3

Если вы используете библиотеки 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.

1