10.编写Autoconf宏

本系列文章均翻译自Autoconf官方文档:Autoconf Manual,github同步项目:question

10.1 宏的定义

AC_DEFUN (name, [body])

定义Autoconf宏,类似于M4的内置宏m4_define。也可以将自己的宏定义写在.m4文件中,在configure.ac文件中调用(推荐做法)。

AC_DEFUN([AX_PYTHON_MODULE],[
    shell脚本
])

10.4 宏之间的依赖

AC_REQUIRE (macro-name)

自动地解决宏调用之间的依赖关系,保证一个宏在满足条件的情况下才会被调用,且只调用一次。只能出现在AC_DEFUN

     AC_DEFUN([TRAVOLTA],
     [test "$body_temperature_in_celsius" -gt "38" &&
       dance_floor=occupied])
     AC_DEFUN([NEWTON_JOHN],
     [test "x$hair_style" = xcurly &&
       dance_floor=occupied])
     
     AC_DEFUN([RESERVE_DANCE_FLOOR],
     [if date | grep '^Sat.*pm' >/dev/null 2>&1; then
       AC_REQUIRE([TRAVOLTA])
       AC_REQUIRE([NEWTON_JOHN])
     fi])

10.5 废弃的宏

AU_ALIAS (old-name, new-name)

宏的重命名。

AU_ALIAS([AC_PYTHON_MODULE], [AX_PYTHON_MODULE])
参考资源链接:[Autoconf手册:创建自动配置脚本](https://wenku.csdn.net/doc/66juwkmtxd?utm_source=wenku_answer2doc_content) 编写`configure.in`脚本来自动检测系统依赖的库函数和头文件是Autoconf工具的核心功能之一。为了深入理解这一过程,推荐参考《Autoconf手册:创建自动配置脚本》。手册中详细介绍了各种和测试方法,这些是编写有效`configure.in`脚本的基础。 首先,你需要安装并熟悉使用Autoconf和m4处理器,因为`configure.in`脚本是基于m4处理器的。`configure.in`通常由`autoscan`工具生成,这个工具会自动检测源代码目录并创建一个基本的`configure.in`模板。 接下来,你可以手动添加更多的,如`AC_CHECK_LIB`,来检查特定库函数是否存在。例如,如果你想检查是否有`libssl`库,可以在`configure.in`中添加如下代码: ``` AC_CHECK_LIB([ssl], [SSL_load_error_strings]) ``` 此外,`AC_CHECK_HEADERS`可以用来检查头文件是否存在。如果你需要检查`<openssl/ssl.h>`头文件,可以添加: ``` AC_CHECK_HEADERS([openssl/ssl.h]) ``` `configure.in`中的会告诉`autoconf`工具在生成最终的`configure`脚本时需要运行哪些测试。这些测试包括检查库函数、头文件以及更多系统特性。 通过在`configure.in`中定义测试,`autoconf`会生成一个`configure`脚本,该脚本在执行时会根据系统的实际情况来配置源代码树,从而确保编译器能够在正确的环境中找到所有必要的库和头文件。 完成上述步骤后,使用`autoconf`生成`configure`脚本,并在目标系统上运行该脚本。`configure`脚本会根据检测结果生成适合当前系统的Makefile和其他配置文件。 为了进一步掌握Autoconf的使用,你可以查看《Autoconf手册:创建自动配置脚本》,这份资源提供了从基础到高级的Autoconf知识,帮助你创建出能够适应多种系统环境的`configure`脚本。 参考资源链接:[Autoconf手册:创建自动配置脚本](https://wenku.csdn.net/doc/66juwkmtxd?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值