?

Log in

No account? Create an account

Программирование на "С/C++" и не только

Previous Entry Share Next Entry
(no subject)
Butters! (Thats me)
heller_i wrote in ru_cpp
Обращаюсь к знатокам буста в связке с vc++ 2008.
Имею несколько вопросов:

1) По умолчанию буст идёт без .lib файлов, которые необходимы при использовании некоторых библиотек (Буст про, где декларируется наличие всего, что нужно, "завис" на старых версиях).
Либы надо билдить тулзой, которую в свою очередь надо билдить. Если некоторым образом потыкать на выполняемые файлы в разных каталогах буста - этого можно добиться, т.е. сборки bjam'а, и после некоторых пассов с вписыванием его в пути, соответственно, и всех lib-файлов.
Внимание вопрос: возможно ли простым способом заставить всю эту билд-систему собрать libы воедино, а не распихивать их в папки очень большой степени вложенности (так как даже к одной библиотеке все либы имеют разные имена в зависимости от цели - debug/release, mt/st и т.п.)

2) Вопрос, связанный с 1. - каким образом настраивать VC++ чтобы она ловила нужные либы из соотв. папок. Я лично не в курсе о такой возможности, подозреваю что ответ - "не возможно".

3) Очень напрягает, когда при подключении какого-либо .hpp выдаётся ошибка линковки к библиотеке, которой либо
а) нет (потому что система автоопределения имени линкуемой либы построило имя, не совпадающее с тем, что сделал bjam, например на 1 букву)
б) она лежит очень глубоко и к проекту её добавлять нужно вручную, что выглядит попросту противоестественно и очень-очень непереносимо (с компа на комп)

Особенно интересует, в частности, boost::test, напрочь отказывается линковаться, требуя библиотеку, на 1 букву отличающуюся от того, что имеется. Не переименовывать же, право слово.

  • 1
bjam --toolset=msvc --build-type=complete stage
в папке boost/stage появятся все либы

спасибо. это разом решило все проблемы.

Тулзу билдить не надо, она выложена в бинарниках. Пример команды для билда буста там приведена. Билдил две версии буста, без каких-либо проблем.

Ну, архив буста должен быть самодостаточным, поэтому я привёл процедуру "с нуля".
Проблемы не в "побилдить буст". Проблемы потом.

Пардон, отвечал ночью, что-то не так понял.
Вообще она складывает в одну папку, у меня проблем не было.

Насчёт самодостаточным можно поспорить. Всё-таки фреймворк не всегда поставляют с утилитами, а предлагают выкачать отдельно, хотя в данном случае наверное соглашусь, тулза не монструозная, удобно было бы запустить один батник и получить всё готовое.

>2) Вопрос, связанный с 1. - каким образом настраивать VC++ чтобы она ловила нужные либы из соотв. папок. Я лично не в курсе о такой возможности, подозреваю что ответ - "не возможно".
Ну лично я сам пользуюсь буст-билдом, хотя понимаю, что для вас это вряд ли решение :)

Возложил болт на билд-систему буста и написал для нужных библиотек Makefile. Так и живем.

>Либы надо билдить тулзой, которую в свою очередь надо билдить.

Не надо её собирать. Нужно скачать готовый бинарник bjam.

>архив буста должен быть самодостаточным, поэтому я привёл процедуру "с нуля".

Объедините два файла boost_1_36_0.zip (52 Мб) и boost-jam-3.1.16-1-ntx86.zip (115 Кб) в один «самодостаточный архив».

>Внимание вопрос: возможно ли простым способом заставить всю эту билд-систему собрать libы воедино, а не распихивать их в папки очень большой степени вложенности...

Возможно.

>Вопрос, связанный с 1. - каким образом настраивать VC++ чтобы она ловила нужные либы из соотв. папок.

В среде: Tools > Options > Projects and Solutions > VC++ Directories. Из списка справа выбираете пункт «Include files», добавляете туда что-то вроде «D:\Develop\SDK\boost_1_36_0». Затем выбираете пункт «Library files», добавляете туда «D:\Develop\SDK\boost_1_36_0\lib». Где вместо lib может стоять любая папка, например, stage (по умолчанию, Boost складывает либы туда).

Ещё раз, это настройки не каждого проекта, а именно среды. Проекты настраивать специальным образом для Буста не придётся.

>потому что система автоопределения имени линкуемой либы построило имя, не совпадающее с тем, что сделал bjam, например на 1 букву

С версии 1.35.00 немного изменились правила, и теперь по умолчанию собирается только релизные версии библиотек Буста. Так что приходится явно указывать ключ «--build-type=complete». Если у вас было несовпадение «на 1 букву», то это, скорее всего, на букву «d» в названиях дебажных библиотек. Либо же на цифру «8», если неправильно определилась версия Студии. Так что лучше явно указать используемую версию Студии: «--toolset=msvc-9.0». Полный bat-файл сборки:
bjam ^
    --build-type=complete ^
    --without-python ^
    --toolset=msvc-9.0 ^
    stage
pause


>она лежит очень глубоко и к проекту её добавлять нужно вручную, что выглядит попросту противоестественно и очень-очень непереносимо (с компа на комп)

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

Да, всё уже решилось с помощью --build-type=complete

>...и после некоторых пассов с вписыванием его в пути...

Это одноразовая утилита, и вписывать её в систему нет необходимости. Просто скопируйте в папку с Бустом и всё.

Добавьте исходники буста как отдельный lib-проект.

  • 1