Autotools 工具
为了简化可移植构建的难度,早期有一套AutoTools的工具帮助程序员构建软件。Auto Tools是GNU程序的标准构建系统。
configure脚本是由软件开发者维护并发布的给用户使用的shell脚本。该脚本的作用是检测系统环境,最终目的是生成Make file和configure.h。
make通过读取Make file文件,开始构建软件。
make install可以将软件安装到默认或者指定的系统路径
- 在上图中,开发者在分发源码包时,除了源代码中的头文件(.h)和程序源文件(.c),还有许多支持软件构建的文件和工具。
- 最重要的就是Makefile.in和config.h。
- configure脚本执行时,将为每一个.in文件处理成对应的非.in文件,即生成:Makefile,src/Makefile,config.h 。大部分情况下,只有Makefile和config.h。
- Makefile用于被make程序识别并构建软件,而config.h中定义的宏,有助于软件通过预编译来改变自身代码,来适应目标平台某些特殊性。
有些软件在configure阶段,还可以生成其他文件,这完全取决于软件本身。
configure
一般而言,configure主要检查当前目标平台的程序,库,头文件,函数等的兼容性。这些结果将作用于config.h和Makefile文件的生成,从而影响最终的编译。
用户可以通过configure配置参数,来定制需要包含或者不需要包含的组件,安装路径等。大概可以分为五组:
· 安装路径相关
· 程序名配置
· 跨平台编译
· 动静态库选项
· 程组件
configure在执行过程中,除了生成Makefile外,还会生成,但是不限于以下文件:
·config.log日志文件
·config.cache缓存文件。提高下一次configure的速度,-C指定
·config.status实际调用编译工具构建软件的shell脚本
如果软件通过libtool构建,还会生成libtool脚本。
Autotools包括了autoconf和automake等命令
autoreconf
autoreconf程序能够自动按照合理的顺序调用autoconf,automake,aclocal程序
configure.ac
configure.ac用于生成configure脚本,autoconf工具用来完成这一步。
AC_PREREQ AC_PREREQ([2.63]) AC_INIT([st], [1.0], [zhoupingtkbjb@163.com]) AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_HEADERS([src/config.h]) AM_INIT_AUTOMAKE([foreign]) # Checks for programs. AC_PROG_CC AC_PROG_LIBTOOL # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([Makefile src/Makefile src/a/Makefile src/b/Makefile]) AC_OUTPUT
其中以AC_开头的类似函数调用一样的代码,实际上是被称为“宏”的调用。
这里的宏,与C语言中的宏概念类似,会被替换展开。
configure.ac文件的一般布局是:
AC_INIT
测试程序
测试函数库
测试头文件
测试类型定义
测试结构
测试编译器特性
测试库函数
测试系统调用
AC_OUTPUT
参考资料:
1. https://www.jianshu.com/p/b3b0a090a01e
2.如何利用configure.ac和Makefile.am生成Makefile