原始出处: http://blog.csdn.net/john_crash/article/details/50110481
检查头文件
AC_CHECK_HEADERS([headers])
例如:
- 1
这个宏将在当前建造环境下检查unistd.h,windows.h是否存在。并将两个参数写入到配置头文件中。一般是config.h,你可以使用AC_CONFIG_HEADERS([headers])来指定。
- 1
如果存在就会出现在config.h中例如下面:
- 1
- 2
- 3
- 4
- 5
检查函数
AC_CHECK_FUNC (function, [action-if-found], [action-if-not-found])
AC_CHECK_FUNCS (function…, [action-if-found], [action-if-not-found])
检查函数是否存在,如果存在执行动作action-if-found,没有发现执行动作action-if-not-found。
如果你没给出action-if-found和action-if-not-found,在发现函数的时候回定义对应的变量,以HAVE_开头,函数的名称都转换成大写。例如:
- 1
如果发现clock_gettime将会定义变量#define HAVE_CLOCK_GETTIME 1在对应的配置头文件中。
如果没发现将不会定义。但是也会有一个注释行/* #undef HAVE_CLOCK_GETTIME */
为configure增加选项
AC_ARG_WITH (package, help-string, [action-if-given], [action-if-not-given])
这个宏可以给configure增加–with-package这样模式的参数。很多软件都有可选项用来打开扩展功能,AC_ARG_WITH就是干这个的。它的第一参数给出扩展包的名称,出现在–with-后面。第二个参数给出一个参数说明,用在./configure –help中。[action-if-given]如果有该选项就被执行,[action-if-not-given]如果没有加这个选项就执行。
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
AS_HELP_STRING([–with-militant],
[Enable militant API assertions])
定义一个帮助字串,将在configure –help中被显示出来。
它可以这么使用configure –width-militant,这导致zmq_militant=”yes”被执行,随后通过测试来定义一个变量ZMQ_ACT_MILITANT=1。
AC_DEFINE(VARIABLE, VALUE, DESCRIPTION)
这个宏会在AC_CONFIG_HEADERS定义的头文件中增加一个定义项。例如:
- 1
- 2
另外使用AC_ARG_ENABLE宏可以为configure增加–enable-feature 或者 –disable-feature这样的选项。
AC_ARG_ENABLE (feature, help-string, [action-if-given], [action-if-not-given])
如果configure中加了给定的选项,就执行action-if-given,否则执行action-if-not-given。
例如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
共享库和静态库
编译动态库或者静态库,你需要再你的configure.ac中加入下面的宏:
- 1
- 2
- 3
LT_PREREQ给出一个版本需求检查。LT_INIT可以实现一些配置,例如win32-dll允许建造动态库,disable-static默认关闭静态库的建造。默认动态库和静态库是同时打开的。
AC_PROG_LIBTOOL检查libtool脚本。做完这些在你的configure中会增加一些选项–enable-static , –enable-shared。
细节参数可以看:libtool help document
自定义的测试程序
AC_RUN_IFELSE (input, [action-if-true], [action-if-false], [action-if-cross-compiling = ‘AC_MSG_FAILURE’])
编译运行input程序,如果程序成功运行返回0,执行action-if-true,否则执行action-if-false。如果交叉编译打开,那么编译出来的代码不能在本机执行,这是其他的动作都不会执行,如果action-if-cross-compiling存在将被执行。
另外这里的input必须是有一个宏指定的源代码。
AC_LANG_PROGRAM (prologue, body)
例如:
- 1
- 2
将被展开为下面的代码:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
下面看一个完整的例子:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
AC_MSG_CHECKING和AC_MSG_RESULT共同显示一个检查信息。这些信息将显示在执行configure脚本时。
上面的宏在编译执行完给定代码后,如何成功就执行libzmq_tipc_support=yes,这同样导致configure打印一个信息if TIPC is available and supports nonblocking connect : yes
下面你可以使用libzmq_tipc_support来定义一个宏到头文件中。