[РЕШЕНО] Настройка site-config.jam для Boost

Вопрос такой: что прописать в /etc/site-config.jam, чтобы можно было собирать boost-озависмые проекты в Gentoo?

Вот у меня есть проект на Boost, который использует для сборки Boost.Build.

Вот фрагмент файла сборки Jamroot:

import boost ;
boost.use_project ;

project mas
    :   requirements
            <library>/boost//thread
            <library>/boost//filesystem
            <library>/boost//system
            <library>/boost//serialization
    ;

lib mas : [glob *.cpp ] ;

И соответствующий файл site-config.jam (под Windows):

using gcc ;
import boost ;
using boost : 1.44 : <root>/C:/Boost ;

(да, я собираю библиотеку с помощью mingw, но это не важно)

Когда я выполняю bjam в Windows, проект (dll-ка libmas.dll) отлично собирается. Но для этого нужно иметь полный вариант Boost'а, его исходники. Просто папки с заголовками и lib-ами (которые получаются сборкой bjam install для boost'а) недостаточно. Оно и понятно, директива using boost ориентируется именно на исходники Boost'а, которые располагаются по заданному пути.

Так вот вопрос, как правильно в Gentoo настроить site-config.jam , если я ставлю boost командой emerge boost ?

Понятное дело, я могу скачать исходники Boost'а и указать using boost : 1.44 : /path/to/boost , но хочется все-таки сделать это правильно, чтобы я мог обновлять boost при помощи emerge и выбирать нужную версию через eselect.

Подскажите, пожалуйста, как это сделать?

Я думаю, что раз тебе нужны

Я думаю, что раз тебе нужны исходники, позаботься, что бы они поставились - переделай текущий ebuild или создай свой который будет только ставить исходники в систему.
ps я думаю проще будет держать свою версию boost, да и исчезнет вероятность, что твоя прога неожиданно перестанет работать/компилиться из-за того, что в новой версии boost, что-то изменилось.

Нет, исходники boost'а мне не

Нет, исходники boost'а мне не нужны. Мне нужна кроссплатформенная сборка, чтобы я, пользуясь одним и тем же Jamroot (или Jamfile) мог получить библиотеку как в Windows, так и в Linux.

Как это сделать?

Свой ebuild мне тоже не подходит, т.к. мне самому придется его обновлять, а мне этого не хочется делать.

Ничего не понял, почему

Ничего не понял, почему системные заголовки и библиотеки не подходят? Чем другие пакеты отличаются от твоего, если твой не может подхватывают системные?

Не грусти, товарищ! Всё хорошо, beautiful good!

Системные заголовки и

Системные заголовки и библиотеки подходят, но как написать site-config.jam, чтобы bjam их подхватывал??

Вот в этом вопрос. Тот site-config.jam, что я привел в начале топика, подходит в Windows, но в Gentoo не работает.

Т.е. мне нужен:
1) Кроссплатформенный Jamroot проекта,
2) Удобная установка boost, не требующий отдельной установки и настройки, хотя бы в Gentoo.

https://svn.boost.org/trac/bo

https://svn.boost.org/trac/boost/browser/trunk/tools/build/v2/contrib/boost.jam

using boost : 1.41 : <include>/usr/include/boost-1_41 <library>/usr/lib/boost-1_41

В Gentoo ставится просто - emerge -av boost:1.41

Не грусти, товарищ! Всё хорошо, beautiful good!

Ответ не верный. Удается

Ответ не верный.

Удается собрать после следующих манипуляций:
* Записать в site-config.jam строчку "using boost : 1.41 : /usr/include/boost-1_41
/usr/lib/boost-1_41"
* Скачать boost.7z, распаковать его,
* экспортировать переменную BOOST_BUILD_PATH=/путь/к/распакованному/бусту/tools/build/v2
* и выполнить bjam

Тогда всё собирается.

Однако, повторяю третий раз (!), мне хотелось бы, чтобы это осуществлялось автоматически, чтобы достаточно было сделать emerge boost, emerge <что-то там ещё> и не нужно было устанавливать переменные окружения и т.п., а потом заморачиваться на тему обновления пакетов. В конце концов, систему я обновляю командой emerge -uDN world, и хочу, чтобы так же обновился и boost, и всё, что с ним связано.

Это возможно? Или всё-таки придется самостоятельно выковыривать /tools/build/v2 ?

пробовали?

http://stackoverflow.com/questions/1001957/boost-build-site-config-jam-on-gentoo

а эта строка - это просто подпись

РЕШЕНО

После вдумчивого чтения contrib/boost.jam и такой-то матери проблему удалось решить.

Вот что нужно сделать:

  • emerge boost-build
  • emerge boost
  • Из архива с исходниками извлечь tools/build/v2/contrib/boost.jam и поместить его в корень /usr/share/boost-build-1.41
  • Сделать ~/user-config.jam вот такого содержания (обратите внимание на layout):
    import boost ;
    using boost
        :   1.41
        :   <include>/usr/include/boost-1_41
            <library>/usr/lib/boost-1_41
            <layout>system
        ;
    
  • ВАЖНО! Не нужно помещать это в /etc/site-config.jam, иначе при следующем emerge boost, система запутается и не сможет его собрать
  • В файле проекта Jamfile ссылаться на бибилиотеки так:
    import boost ;
    boost.use-project ;
    
    project testprj
        :   requirements
                <library>/boost//thread/<variant>release
        ;
    
    exe testexe : ... ;
    
  • Обратите внимание на то, что используется релизный вариант библиотеки. Если хочется отладочный, то boost нужно собирать с флагом debug

После этого можно собирать проект вызовом bjam.

Ну и после обновления системы нужно снова закинуть файлик contrib/boost.jam в /usr/share/boost-build. К сожалению, так и не разобрался, как забороть вот этот последний пункт.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".