Autotools 工具

为了简化可移植构建的难度,早期有一套AutoTools的工具帮助程序员构建软件。Auto Tools是GNU程序的标准构建系统。

configure脚本是由软件开发者维护并发布的给用户使用的shell脚本。该脚本的作用是检测系统环境,最终目的是生成Make file和configure.h。
make通过读取Make file文件,开始构建软件。
make install可以将软件安装到默认或者指定的系统路径

 

 

  • 在上图中,开发者在分发源码包时,除了源代码中的头文件(.h)和程序源文件(.c),还有许多支持软件构建的文件和工具。
  • 最重要的就是Makefile.inconfig.h
  • configure脚本执行时,将为每一个.in文件处理成对应的非.in文件,即生成:Makefilesrc/Makefileconfig.h 。大部分情况下,只有Makefileconfig.h
  • Makefile用于被make程序识别并构建软件,而config.h中定义的宏,有助于软件通过预编译来改变自身代码,来适应目标平台某些特殊性。
    有些软件在configure阶段,还可以生成其他文件,这完全取决于软件本身。
configure

一般而言,configure主要检查当前目标平台的程序,库,头文件,函数等的兼容性。这些结果将作用于config.hMakefile文件的生成,从而影响最终的编译。
用户可以通过configure配置参数,来定制需要包含或者不需要包含的组件,安装路径等。大概可以分为五组:

·  安装路径相关

·  程序名配置

·  跨平台编译

·  动静态库选项

·  程组件

configure在执行过程中,除了生成Makefile外,还会生成,但是不限于以下文件:

·config.log日志文件

·config.cache缓存文件。提高下一次configure的速度,-C指定

·config.status实际调用编译工具构建软件的shell脚本

如果软件通过libtool构建,还会生成libtool脚本。

 

Autotools包括了autoconfautomake等命令

autoreconf

autoreconf程序能够自动按照合理的顺序调用autoconfautomakeaclocal程序

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

 

posted @ 2022-11-15 19:23  PKICA  阅读(129)  评论(0编辑  收藏  举报