引用自:http://blog.dccmx.com/2011/01/autotools-additional/
----------------------------------------
有了前面几篇文章介绍的几招,基本的构建系统就算完成了。开始离专业水平还有一定距离。我们现在看看一些后续的方法,让我们的构建脚本更加专业。
1.设置库依赖和预处理宏:
设置依赖库和宏的方法很简单,只要维护gcc的参数就ok了。这些参数在Makefile.am里面维护。
先在configure.ac里面加上相关的宏:AM_PROG_CC_C_O。
要添加预处理宏的话(比如_GNU_SOURCE宏)只要在Makefile.am里面添加xxx_CFLAGS = -D_GNU_SOURCE。好了。重新configure吧。
依赖的库呢?你猜对了,在Makefile.am里面添加xxx_LDFLAGS = -lssl -lidn -lz就ok了。生活。。。真美好!
2.检查目标系统上的库:
如何检查目标系统上有没有我们程序依赖的库呢。很简单,在configure.ac里面加上AC_CHECK_LIB宏。其实autoscan会检查Makefile.am中的_LDFLAGS而自动在configure.ac里面添加相关的check宏的。这个宏的原型如下:
AC_CHECK_LIB(library, function, [action-if-found], [action-if-not-found], [other-libraries])
中间的function可以选择lib里面最典型的一个函数,用来测试找到的lib是不是你要的lib,你懂的。举个例子:
AC_CHECK_LIB([ssl], [SSL_get_peer_certificate], [have_ssl=yes])
在在下面加入:
if test "x${have_ssl}" = xno; then
AC_MSG_ERROR([
------------------------------------------
Unable to find ssl on this system.
------------------------------------------])
fi
好了,找不到libssl,或者libssl不对(里面没有SSL_get_peer_certificate),就会提示了。
检查头文件呢?你猜对了。
AC_CHECK_HEADER(header-file, [action-if-found], [action-if-not-found], [includes])
3.部署文件:
目前为止,默认make install已经可以将我们的bin文件安装到/usr/local/bin下了(可以用–prefix改)。如果我们要安装其他文件呢,比如默认配置文件啊等等。
比如我们在xml目录下有a.xml b.xml要安装到默认的@data@/xml目录下(默认是/usr/local/share)。
第一步,在xml目录下建Makefile.am。内容如下:
xmldir = $(datadir)/xml
xml_DATA = a.xml b.xml
第二步,在configure.ac里面的AC_CONFIG_FILES([Makefile src/Makefile]) 加上这个Makefile,改成AC_CONFIG_FILES([Makefile src/Makefile xml/Makefile])
第三步,重新autoconf,automake。其实只要一个命令autoreconf就行了。这个命令会替你调用autoheader和automake的。
想要make dist的时候包含到压缩包里?在xml_DATA前面加上dist变成:dist_xml_DATA就ok了。
好了,make install看看。