Мой проект компилируется с использованием GNU autotools (aclocal && autoconf && ./configure && make
). Я хотел бы использовать Boost, и я хотел бы, чтобы другие люди также могли его скомпилировать.
/usr/share/aclocal
Дир, но это не помогает кому-то еще, кто хочет скомпилировать проект, используя ./configure && make
,Архив имеет 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) \
...
Там отлично 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
сообщение об ошибке, если нет доступной приемлемой версии.
AC_CONFIG_MACRO_DIR
где эти файлы .m4 идут
AC_CONFIG_MACRO_DIR([m4])
где макросы находятся в каталоге «m4». Я ожидаю, что различные макросы Boost .m4 будут иметь какой-то способ configure
какой пакет Boost искать (для нескольких установок Boost) и где он находится (нестандартные установки).