如何在GNU Autotools项目中包含Boost?

SRo*_*mes 8 c++ boost makefile autotools

我的项目使用GNU autotools(aclocal && autoconf && ./configure && make)编译.我想使用Boost,我希望其他人也可以编译它.

  1. 我应该将Boost放在项目的目录中,还是依赖系统的Boost?
  2. 我该如何告诉autotools使用Boost?我用谷歌搜索并发现许多m4文件声称这样做 - 但我应该把那些m4文件放在哪里?我可以在我的/usr/share/aclocal目录中存储一个,但这对使用其他想要编译项目的人没有帮助./configure && make.

Dan*_*lKO 17

归档AX_BOOST_*.

我切换到boost.m4已经有一段时间了,但是在boost.m4完成对第二个库的测试之前,我可以在vim中手动编辑带有完整Boost路径的Makefile.

我回到档案馆,很高兴知道增强宏正在积极维护; 然后我开始从我的每个项目中清除boost.m4.

用例的相关摘录(假设ax_boost _*.m4文件位于子目录m4中):

./bootstrap

aclocal -I m4 --install
...
Run Code Online (Sandbox Code Playgroud)

./configure.ac

...
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
...
Run Code Online (Sandbox Code Playgroud)

./Makefile.am

ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = bootstrap ...
SUBDIRS = ... src ...
...
Run Code Online (Sandbox Code Playgroud)

./src/Makefile.am

AM_CPPFLAGS = \
    ... \
    $(BOOST_CPPFLAGS) \
    ...

...

AM_LDFLAGS = ... \
    $(BOOST_LDFLAGS)

...

lib_LTLIBRARIES = libFoo.la

...

libFoo_la_LIBADD = \
    ... \
    $(BOOST_FILESYSTEM_LIB) \
    $(BOOST_SYSTEM_LIB) \
    ...
Run Code Online (Sandbox Code Playgroud)


lda*_*v1s 0

  1. 肯定会依赖系统的 Boost 安装。IIRC,我上次构建 Boost 时需要非标准工具(wrt autoconf 所需的便携式工具)来构建 Boost。也花了很长时间。
  2. AC_CONFIG_MACRO_DIR是那些 .m4 文件所在的位置

    AC_CONFIG_MACRO_DIR([m4])
    
    Run Code Online (Sandbox Code Playgroud)

其中宏位于“m4”目录中。我希望各种 Boost .m4 宏能够通过某种方式告诉configure要查找的 Boost 包(对于多个 Boost 安装)以及它的位置(非标准安装)。