Как включить Boost в проект GNU Autotools?

Мой проект компилируется с использованием GNU autotools (aclocal && autoconf && ./configure && make). Я хотел бы использовать Boost, и я хотел бы, чтобы другие люди также могли его скомпилировать.

  1. Должен ли я добавить Boost в каталог моего проекта или положиться на Boost системы?
  2. Как мне сказать autotools использовать Boost? Я гуглил и нашел много файлов m4, которые утверждают, что делают это — но где я должен поместить эти файлы m4? Я могу спрятать один в моем /usr/share/aclocal Дир, но это не помогает кому-то еще, кто хочет скомпилировать проект, используя ./configure && make,

8

Решение

Архив имеет AX_BOOST_*,

Я перешел на boost.m4 Некоторое время, но это так мучительно медленно, что я мог отредактировать Makefile с полным путем Boost вручную в vim, прежде чем boost.m4 закончил тестирование второй библиотеки.

Я вернулся в архив и был рад узнать, что макросы boost снова активно поддерживаются; Затем я приступил к очистке boost.m4 от каждого из моих проектов.

Соответствующие выдержки из варианта использования (при условии, что файлы ax_boost _ *. M4 находятся в подкаталоге m4):

aclocal -I m4 --install
...
...
AC_CONFIG_MACRO_DIR([m4])
...
AX_BOOST_BASE([1.48],, [AC_MSG_ERROR([libfoo needs Boost, but it was not found in your system])])
AX_BOOST_SYSTEM
AX_BOOST_FILESYSTEM
...
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = bootstrap ...
SUBDIRS = ... src ...
...
AM_CPPFLAGS = \
... \
$(BOOST_CPPFLAGS) \
...

...

AM_LDFLAGS = ... \
$(BOOST_LDFLAGS)

...

lib_LTLIBRARIES = libFoo.la

...

libFoo_la_LIBADD = \
... \
$(BOOST_FILESYSTEM_LIB) \
$(BOOST_SYSTEM_LIB) \
...
17

Другие решения

Там отлично boost.m4 макрос, который вы можете включить в свой проект в m4 подкаталог. Эти макросы расположены с AC_CONFIG_MACRO_DIR([m4]) в configure.ac,

добавлять ACLOCAL_AMFLAGS = -I m4 --install на верхний уровень Makefile.am, использован automake,

Вот почему это такой хороший макрос:

BOOST_REQUIRE([1.54],[ACTION-IF-NOT-FOUND])

Это определит BOOST_CPPFLAGS который вы можете добавить к CPPFLAGSиспользовать в AC_SUBST, так далее.

Для отдельных компонентов Boost можно указать отладочные сборки, статические сборки и т. Д. Но лучше всего использовать (как правило) многопоточные динамические библиотеки, например,

BOOST_FILESYSTEM([mt])

определит BOOST_FILESYSTEM_LIBS а также BOOST_FILESYSTEM_LDFLAGS, В качестве еще одного бонуса, если библиотека опирается, скажем, на Boost.System, то эти библиотечные зависимости автоматически добавляются в LIBS, LDFLAGS, так далее.


Вы должны просто указать, что требуется установка Boost, а не пытаться распространять ее. Он легко собирается и устанавливается из исходного кода или из предварительно скомпилированных пакетов. Первый занимает много времени, но лучше иметь «оптимизированную» сборку системы. Существует множество программ, которые могут использовать (надежную и оптимизированную) реализацию Boost.

Затем используйте BOOST_REQUIRE сообщение об ошибке, если нет доступной приемлемой версии.

1

  1. Я бы определенно положитесь на установку Boost системы. IIRC, в последний раз, когда я создавал Boost, для сборки Boost требовались нестандартные инструменты (за исключением переносимых инструментов, необходимых для autoconf). Это также заняло много времени.
  2. AC_CONFIG_MACRO_DIR где эти файлы .m4 идут

    AC_CONFIG_MACRO_DIR([m4])
    

где макросы находятся в каталоге «m4». Я ожидаю, что различные макросы Boost .m4 будут иметь какой-то способ configure какой пакет Boost искать (для нескольких установок Boost) и где он находится (нестандартные установки).

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector