美文网首页
烦人的构建工具autotool

烦人的构建工具autotool

作者: 明翼 | 来源:发表于2020-11-05 10:07 被阅读0次

希望这篇文章可以理清这个工具,了解其使用。

前言

说真的,autotools工具让我很头疼,各种类似的工具autolocal ,automake 以及生产各种相似的文件Makefile.in , Makefile.am 想生成个Makefile 真是麻烦啊,但是很多开源软件的C或C++代码,很多都采用这种构建方式, 挺烦人的。

简单的编译和安装一般比较简单,三步走,如下,当时一旦出错,让人摸不着头脑,如果对autotools工具不了解,就一脸懵逼,无从下手。

./configure && make && make install

一 构建演化

首先要了解为什么要有autoconf,automake这类工具,那是因为我们c或c++代码在编译的时候通过Makefile构建的,Makefile有个好处,其中一个文件更新之后,自动只编译依赖这个文件的文件,其他的没有关系的文件不用重新编译,从而加快构建过程。

1.1 简单 Make

Makefile

如上图简单的情况,我们可以通过make直接构建:

make 

1.2 复杂的Make

简单的Makefile文件还是比较容易编写的,但是复杂的Makefile文件就挺麻烦的,比如我们依赖的头文件在哪里,我们依赖的库应该怎么写;特别是不同的操作系统接口越来越多的差异,导致生成Makefile很复杂,我们通过手工写一个配置脚本configure来生成解决问题:


configure&&make

如上图,复杂一点,我们可以通过如下的命令构建:

./configure && make

configure 的作用是来检查系统环境,比如采用什么编译器,比如一些库是否支持等。通常会生成makefile和config.h。
configure脚本运行时扫描当前环境,生成一个名为config.status的子脚本。子脚本将Makefile.in文件转换为适应于当前系统环境的Makefile文件。

1.3 autoconf

随着Linux系统的问世,各种版本很复杂,我们在一个系统上可以编译的程序,在另外一个系统可能根本无法编译通过,为了维护多个系统版本,比如我们以前的代码需要在HP-UNIX,AIX,LINUX等多个平台上运行,都需要适配,是通过一个脚本来解决的,但是如果更多平台,这个脚本越来越复杂,底层的细节越来越多。

1991年,David Mackenzie开发了Autoconf工具,用来自动生成configure脚本,屏蔽了底层的不同操作系统的差异,库版本的差异。节省了开发人员的时间。

用户定义几个宏,通过autoconf自动构建configure工具。工具包里面还有autoscan工具,可以自动扫描项目,生成configure.scan文件,里面自动默认添加许多宏,包括系统配置的基本选项,进一步节省我们的时间,只需要将configure.scan改名为configure.ac,再进行简单的修修,就可以了。
整个流程如下:

autoconf

1.4 automake

以上感觉还好,并没有多复杂,但是现实的要复杂的多,有些makefile文件的生成并不是由configure生成的,据说是为了简化makefile生成,发明了一个automake的工具,作用利用Makefile.am来生成Makefile.in 和Makefile。

automake相当于对autoconf的扩展,里面用到了一些宏,配合使用的话,需要再configure.ac中添加AM_INIT_AUTOMAKE这个宏,这个宏是在automake里面定义的。

我们需要一个autolocal(aclocal - create aclocal.m4 by scanning configure.ac)的工具来扫描configure.ac来生成autoconf运行时候需要的宏,autolocal会生成一个aclocal.m4的文件,autoconf运行的时候通过它找到了宏定义;

autoconf 利用configure.in和aclocal.m4来生成configure脚本文件。

configure脚本文件的作用是能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。
流程图如下:


autotool比较完整图

)

图中:绿色部分是需要人工输入,外部的;黄色部分:表示是自动生成的。
整体给我的感觉,让整个构建过程越来越复杂了,不是简单了。

二 实践

简单实践下整个过程,下次直接跟着做就可以了。


autotool整个过程

说明步骤:


步骤

三 为什么要研究这玩意

autotool看上去挺烦的,自己也是在工作中遇到一个问题,报错:
先用autoconf从configure.ac生成configure,然后执行时候报错:

syntax error near unexpected token LIBPCREVERSION
PKG_CHECK_MODULES(...

具体如下图:


configure报错

当时查这个宏应该通过autoconf自动展开,现实是没有展开,直接复制到configure里面了,导致执行configure命令报错。

所以问题的根源在于: autoconf没有找到PKG_CHECK_MODULES这个m4宏的定义,所以没有展开,导致configure的文件生成有问题,解决办法:

autoreconf -I /usr/share/aclocal

如果不行,记得清理下,autotool生成的很多文件,可以参考上面图片产生的文件,运行下:

 make maintainer-clean

再执行:

autoreconf --force --install

autoconf需要GNU m4宏处理器来处理aclocal.m4,生成configure脚本.m4是 一个宏处理器.将输入拷贝到输出,同时将宏展开.宏可以是 内嵌的 ,也可以是 用户定义的 .除了可以展开宏,m4还有一些内建的 函数,用来引用文件,执行命令,整数运算,文本操作,循环等.m4既可以作为编译器的 前端,也可以单独作为一个宏处理器.

四 其他构建工具

除了automake,还有cmake,这是跨平台的。
更看好xmake,看下安装和构建过程更简单。

4.1 构建图示

xmake构建

4.2 简单的helloworld

xmake构建 xmake生成

就需要源文件,一个命令搞定,真贴心。

4.3 更复杂的演示操作视频:

[图片上传失败...(image-e99e93-1604116656632)]

五参考

[https://www.laruence.com/2009/11/18/1154.html](https://www.laruence.com/2009/11/18/1154.html)
[https://www.zhihu.com/question/22644913](https://www.zhihu.com/question/22644913)
[https://www.itread01.com/content/1550325244.html](https://www.itread01.com/content/1550325244.html)
[https://segmentfault.com/a/1190000006915719](https://segmentfault.com/a/1190000006915719)
[https://www.itread01.com/content/1550325244.html](https://www.itread01.com/content/1550325244.html)

相关文章

  • 烦人的构建工具autotool

    希望这篇文章可以理清这个工具,了解其使用。 前言 说真的,autotools工具让我很头疼,各种类似的工具auto...

  • libtorrent安装

    正确姿势是(autotool构建,非cmake,不用build boost first!!!!) 副作用,其中cl...

  • xmake自动构建工具

    一 前言 autotool简化了Makefile的构建难度,让我们方便的生成复杂项目的Makefile;CMake...

  • 利用autotool生成Makefile

    平时自己写的程序多是直接写Makefile,大型的开源C代码,多是通过autotool工具来生成,需要学习下。为了...

  • Maven的核心概念

    Maven是一个强大的Java项目构建工具 什么是构建工具? 构建工具是将软件项目构建相关的过程自动化的工具。构建...

  • 前端架构之路(5) - 构建工具 for teamwork

    构建工具 for teamwork 1. 为什么需要 “构建工具 for teamwork” 现在对于构建工具的使...

  • Gradle 入门学习笔记

    构建工具的作用 构建管理 自动化、测试、打包、发布 主流构建工具 ant、maven、gradle Groovy ...

  • RT-Thread 学习之 SCons 构建工具(1)

    什么是构建工具 其实不知道什么是构建工具也可以继续学习,既然我们想深入学习,那就先了解一下什么是构建工具。 构建工...

  • gulp简单介绍与开发环境的配置

    简介 一个前端自动化的构建工具,一个streaming构建工具,一个nodejs写的构建工具好处:1、js和css...

  • 自动化构建工具gulp的学习心得

    个人理解Gulp是一个构建工具,它的来源是从后端演变而来: buid code ->构建代码 ->构建工具->计算...

网友评论

      本文标题:烦人的构建工具autotool

      本文链接:https://www.haomeiwen.com/subject/dcxjvktx.html