最近一直在类unix系统上(Ubuntu和Mac OS)上调研第三方的一些开源库,要涉及到开源库的编译安装工作,接触最多的就是./configure & make & make install

以前我们在Windows上进行开发的过程中,使用Visual Studio打开sln直接一个按钮就编译生成最终的可执行文件,具体的编译过程不得而知,而在类unix系统中这些过程都得自己来搞,麻烦是麻烦了些,但是能学到深层次的知识。

GNU构建系统(GNU Build System)主要是指通过autoconf、automake和libtool这三个工具构建出来的软件结构体系,又名Autotools。

GNU构建系统是利用脚本和make程序在特定的平台上构建软件的过程。一般过程是./configure,make,make install 三部曲。这种方式成为一种习惯,被广泛使用。

一般github上的开源项目都提供了使用这套构建系统的入口,要么是使用make程序,要么是使用更高级点的cmake。

下图(来自维基百科)展示了GNU构建体系编辑和使用的流程:浅蓝色矩形作为处理工具的输入,椭圆作为处理工具,最终的浅绿色矩形为最终的可执行文件输出。

最关键的一部就是生成makefile文件,之后调研make & make install只是常规的步骤。

其中congure.ac、makefile.am是库作者最好必须提供的。

在ubuntu上可以使用 sudo apt-get autoconf automake libtool来安装AutoTools。

接下来,我们来看两个开源库例子:

  • gperftools:google性能工具集合,包括heap checker、heap profiler、tcmalloc以及cpu profiler。

  

  里面有个shell脚本文件autogen.h,用于产生configure脚本,进而使用configure脚本来生成makefile文件,autogen.h内容如下:

  

  仔细点看,不是使用的我们上面所说的autoconf,而是autoreconf,从最开始的一幅图可知,autoconf接收aclocal.m4以及configure.ac作为输入,这事先需要使用aclocal工具来生成aclocal.m4,是有个先后顺序的,如果autoconf接收的输入多了,先后顺序也就会增多,不方便管理。而此时autoreconf则显现出作用,它是一个辅助工具,可以将上述所述的先后顺序自动地以正确的顺序调用,而不用关心具体的细节,简直是方便了太多。

  执行autoconf(这里执行的是autogen.sh脚本)就生成了我们的configure脚本,直接调用./configure就可以生成我们的makefile了,当然,如果需要定义一些细节,则可以在./configure后添加选项参数(./configure -help查看可以自定义哪些选项),最后就是make&make install了。

  • thrift:apache的rpc框架

  

  提供的文件和上面的gperftools差不多,多了CMakeLists.txt告知我们可以使用cmake的方式来构建,但最终还是要生成makefile文件,这里有一个shell脚本文件bootstrap.sh需要重点看下:

  

  可以看到,最后执行的autoscan、aclocal、autoheader、autoconf、automake,说的还是最开始图中所说的那个流程,都能走到生成makefile的一步。

  ./configure & make & make install三部曲,万变不离其宗!

  上面通过梳理学习,了解了开源项目的大致文档结构,如果我们自己搞开源库,也可以这样来组织,可参考例解 autoconf 和 automake 生成 Makefile 文件

./configure & make & make install 知其所以然的更多相关文章

  1. 【转】./configure && make && make install详解

    在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README  INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装!          我们都知道源 ...

  2. CentOS ./configure && make && make install详解

    码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). 在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README  INST ...

  3. ./configure && make && make install详解 (转)

    在Linux中利用源码包安装软件最重要的就是要仔细阅读安装包当中的README INSTALL两个说明文件,这两个文件会清楚的告诉你如何可以正确的完成这个软件的安装! 我们都知道源码包安装分为这么几个 ...

  4. 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"

    [深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...

  5. [转]./configure,make,make install的作用

    ./configure,make,make install的作用(转) 这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台 ...

  6. [linux笔记]理清linux安装程序用到的(configure, make, make install)

    我作为一名经常和linux打交道的程序员,每次在linux安装软件都祈求可以用——apt-get,yum,brew等应用程序管理器安装,有的时候事与愿违,你只能自己编译安装-wtf,说好的美丽世界呢? ...

  7. configure, make, make install都做了什么

    1. 我的理解./configure:  确保接下来的make以及make install所依赖的文件没有问题make:  build编译连接生成可执行程序make install: 将编译好的可执行 ...

  8. 【转】configure/make/make install的使用说明

    这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...

  9. The magic behind configure, make, make install

    原文:https://robots.thoughtbot.com/the-magic-behind-configure-make-make-install#where-do-these-scripts ...

随机推荐

  1. git stash 命令

    摘自: http://blog.csdn.net/longxiaowu/article/details/26815433 关于git stash命令的使用方法网上一大把,我想记录的是我在使用过程中觉得 ...

  2. yum总结

    yum企业案例          yum命令工具参数详解 yum install httpd 安装httpd软件包 yum search YUM搜索软件包 yum list httpd 显示指定程序包 ...

  3. webpy安装

    C:\Users\ceshi>python -m pip install web.pyCollecting web.py Downloading web.py-0.38.tar.gz (91kB ...

  4. Anaconda 下载

    Anaconda官网:https://repo.anaconda.com/archive/清华大学镜像站:https://mirrors.tuna.tsinghua.edu.cn/anaconda/a ...

  5. 反射&异常

    反射 通过字符串映射或修改程序运行时的状态.属性.方法.python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执 ...

  6. LeetCode 611. Valid Triangle Number有效三角形的个数 (C++)

    题目: Given an array consists of non-negative integers, your task is to count the number of triplets c ...

  7. LG2770/LOJ6122 航空路线问题 费用流 网络流24题

    问题描述 LG2770 LOG6122 题解 教训:关掉流同步之后就不要用其他输入输出方式了. 拆点. 两个拆点之间连\((1,1)\),其他连\((1,0)\) \(\mathrm{Code}\) ...

  8. 学习:逆向PUSH越界/INT 68/反调试导致的程序

    自己根据shark恒老师的分析,总结一下: 一般反调试自动关闭程序利用的函数有: 1.CreateToolhelp32Snapshot 2.FindWindow 3.ExitProcess 4.Pos ...

  9. du和ls的区别:如何正确计算文件大小

    上一篇文章写到的权限检查脚本,后来我又加入了 apk size 对比的功能,分享给组内同事使用后,暴露出一个问题:脚本输出的 apk size 和 Jenkins 出包信息以及电脑上显示的存储大小都有 ...

  10. MySQL实战45讲学习笔记:第八讲

    一.今日内容概要 我在第 3 篇文章和你讲事务隔离级别的时候提到过,如果是可重复读隔离级别,事务 T 启动的时候会创建一个视图 read-view,之后事务 T 执行期间,即使有其他事务修改了数据,事 ...