2017-01-25 9 views
3

Я ищу простую настройку для config.jam, которая будет создавать Boost (1,60 или новее) для x86 и x64 для Windows с использованием MSVC. В идеале, используя один вызов для b2 - я знаю, что он должен поддерживать создание нескольких выходов из одного вызова. Наличие двух отдельных вызовов для x86 и x64 в порядке, но не является предпочтительным.Building Boost для 32-разрядной и 64-разрядной версий Windows в той же папке

Другая вещь, я бы хотел, чтобы она выводила оба набора библиотек в ту же папку. Очевидно, тогда им нужно иметь разные имена, поэтому я бы хотел, чтобы он помещал -x64 где-то в именах двоичных файлов x64. И он по-прежнему нуждается в автоматической привязке, поэтому я не могу просто переименовать их вручную, это должно быть то, что поддерживает система сборки. Эта часть важна.

Я read, что b2 обеспечивает параметр --buildid и авто-ссылка поддерживает BOOST_LIB_BUILDID определить что позволяет вставлять пользовательский ключевое слово, как это, но я не знаю точно, как использовать их. Можно ли указать две сборки в config.jam, один с buildid и один без (и запустить их как с одним вызовом на b2), так и для этого действительно требуется два отдельных вызова?

Кто-нибудь знает волшебные слова?

ответ

3

Я думаю, что это просто не то, что люди делают.

Я решил, что просто выполнил команду дважды; для записи моего рабочего колдовства была такова:

bootstrap 
b2 -j8 --build-dir=build    toolset=msvc-14.0 variant=debug,release link=shared threading=multi runtime-link=shared     stage 
b2 -j8 --build-dir=build --buildid=x64 toolset=msvc-14.0 variant=debug,release link=shared threading=multi runtime-link=shared address-model=64 stage 

Это ставит x86 и x64 библиотеки в stage\lib; для собственно компиляции приложений требуется только содержимое этой папки и папка boost. Тогда при создании программного обеспечения, этот фрагмент кода добавляется к проекту файлов (с помощью реквизита файла):

<PropertyGroup> 
    <BoostIncludeDir>path\to\include\boost\</BoostIncludeDir> 
    <BoostLibDir>path\to\lib\</BoostLibDir> 
</PropertyGroup> 
<ItemDefinitionGroup> 
    <ClCompile> 
    <AdditionalIncludeDirectories>$(BoostIncludeDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
    <PreprocessorDefinitions>BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)</PreprocessorDefinitions> 
    <PreprocessorDefinitions Condition="'$(Platform)'=='x64'">BOOST_LIB_BUILDID=x64;%(PreprocessorDefinitions)</PreprocessorDefinitions> 
    </ClCompile> 
    <Link> 
     <AdditionalLibraryDirectories>$(BoostLibDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> 
    </Link> 
</ItemDefinitionGroup> 

(BOOST_ALL_DYN_LINK технически необязателен, но это помогает улучшить совместимость, если вы компиляцию библиотеки DLL, которые имеют тип подталкивания в их экспортируемом API Вам все равно нужно убедиться, что все они скомпилированы с тем же компилятором и версиями Boost.)