LINUX.ORG.RU

Подключение boost в проект

 , ,


1

2

Ищу возможность включить boost в сборку проекта. Для сборки используется cmake. Проблема следующая: через add_custom_(command|target) получается зависимость вида client_app -> libboost_xxx, т. е. при изменении исходника в дереве boost пересборки не будет, только руками.

Ещё можно собрать путём execute_process, но он в configure-time отрабатывает - теперь при изменении кода boost нужно повторить конфигурацию(и тоже руками - зависимости только bjam знает, который после конфигурирования не запускается).

Последний вариант, который нашёл: безусловно запускать bjam путём build events, с порядком PRE_BUILD. Но, согласно доке cmake-а: This is supported only on Visual Studio 7 or later - не катит, в общем. Порядок PRE_LINK поддерживается всеми(или почти) генераторами, но это то же самое, что и первый вариант + boost при сборке заголовки в кучу собирает: в чистом дереве они по подмодулям лежат - поэтому либо дофига путей в дебри подмодулей прописывать, либо препроцессирование может упасть на ровном месте(т. к. порядок компиляции не определён).

Кто каким образом поступает в подобных случаях(исключая использование установленного в систему boost-а)?

Deleted

ExternalProject

А если можно обойтись одними заголовками, то через bcp их скопировать и успокоиться

annulen ★★★★★
()
Ответ на: комментарий от pon4ik

Главный вопрос в том, в какой именно момент пересобирается: сборка любого исходника приложения должна начинаться строго после окончания сборки boost

Deleted
()
Ответ на: комментарий от Deleted

сборка любого исходника приложения должна начинаться строго после окончания сборки boost

Даже обьектников? Странное требование, ну да ладно.

If the ALL option is specified it indicates that this target should be added to the default build target so that it will be run every time (the command cannot be called ALL).

Вот это проверял как работает для add_custom_target?

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Да, это первым делом смотрел. Там в заголовках boost-а всё дело - процесс bjam создает в том числе каталог /boost в корне дерева исходников. Там симлинки на заголовки, именно посредством этих симлинков include отрабатывает. А изначально их нет, поэтому при попытке компиляции какого-нибудь исходника приложения, содержащего например #include <boost/system/error_code.hpp>, сборка упадёт. Опция ALL даёт выполнение команды по cmake --build, но порядок не гарантирует

Deleted
()

Остановился на ExternalProject, вроде, то что надо

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.