2013-08-05 5 views
3

Возможно ли сделать автоматическую сборку текущих библиотек ускорения с помощью b2.exe инструмент для инструментария «v110_xp»?Усиление здания под Visual Studio 2012 с помощью набора инструментов платформы 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 

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

ответ

2

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

Мне все еще нужно проверить это. Возможно, у кого-то больше опыта с этим.

+1

Это также результат обсуждения [этой темы] (http://lists.boost.org/boost-build/2012/12/26630.php). Я уже прошел тест, и он выглядит хорошо. – mem64k

+1

Насколько я знаю, это верно только для статической связи. Если вы используете динамическую связь, необходимую для boost_thread * .dll, вам нужно будет перестроить boost с соответствующими настройками, как описано в ответе ниже. – fmuecke

4

Эти инструкции предполагают, что у вас установлена ​​версия Visual Studio 2012 или Visual Studio 2012 Express вместе с boost 1.54.

Изменить содержание указанных ниже файлов в папке повышающего (который загружается и экстрагируют)

В 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. сборки.летучая

Изменение:

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 
2

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

  1. Распаковка подталкивание и корневая папка Гота в консоли
  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. Сложения подталкивание сборка система

    call bootstrap.bat 
    
  5. Сложения Повышение библиотеки с 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 компилятор)

+0

bootstrap.bat не работает с этими инструкциями на VC2013 – paulm

1

Если вы используете библиотеки 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, работали просто отлично (мы использовали функцию автозапуска)

Here - это ссылка на заголовок конфигурации Windows версии 1.56, но то же самое в 1.57), который устанавливает режим совместимости xp.