我的项目使用GNU autotools(aclocal && autoconf && ./configure && make
)进行编译。我想使用Boost,我希望其他人能够编译它。
/usr/share/aclocal
目录中存储一个,但这对于想要使用./configure && make
编译项目的其他人没有帮助。答案 0 :(得分:17)
The Archive有AX_BOOST_*
。
我切换到boost.m4已经有一段时间了,但是在boost.m4完成对第二个库的测试之前,我可以在vim中手动编辑带有完整Boost路径的Makefile。
我回到档案馆,很高兴得知升级宏正在积极维护;然后我开始从我的每个项目中清除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) \
...
答案 1 :(得分:2)
您可以在m4
子目录中的项目中包含一个优秀的boost.m4宏。这些宏位于AC_CONFIG_MACRO_DIR([m4])
的{{1}}。
将configure.ac
添加到ACLOCAL_AMFLAGS = -I m4 --install
使用的顶级Makefile.am
。
这就是为什么它是如此好的宏:
automake
这将定义BOOST_REQUIRE([1.54],[ACTION-IF-NOT-FOUND])
,您可以将其添加到BOOST_CPPFLAGS
,在CPPFLAGS
中使用,等等。
对于单独的Boost组件,可以指定调试版本,静态版本等。但是(通常)多线程动态库是最好的,例如,
AC_SUBST
将定义BOOST_FILESYSTEM([mt])
和BOOST_FILESYSTEM_LIBS
。另外,如果库依赖于Boost.System,那么这些库依赖项会自动添加到BOOST_FILESYSTEM_LDFLAGS
,LIBS
等。
您应该只指定需要Boost安装,而不是尝试分发它。它可以从源代码或预编译的软件包轻松构建和安装。前者需要很长时间,但最好在系统上进行“优化”构建。有很多软件可以使用(强大且优化的)Boost实现。
如果没有可接受的版本,请使用LDFLAGS
错误消息。
答案 2 :(得分:0)
AC_CONFIG_MACRO_DIR
是那些.m4文件的地方
AC_CONFIG_MACRO_DIR([m4])
其中宏位于“m4”目录中。我希望各种Boost .m4宏能够告诉configure
要查找的Boost包(用于多个Boost安装)以及它在哪里(非标准安装)。