最近一直在类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. vmworkstation pro安装

    runtime dll安装程序未能完成安装 解决方法: 1.出现这个问题的时候不要点确定(如果点了确定,会找不到步骤4中的文件夹) 2.win+R调出 '运行' 3.输入%temp%,进入C:\Use ...

  2. 2019面向对象程序设计(Java) 第17周-18周学习指导及要求

    2019面向对象程序设计(Java)第17周-18周学习指导及要求 (2019.12.20-2019.12.31)   学习目标 (1) 理解和掌握线程的优先级属性及调度方法: (2) 掌握线程同步的 ...

  3. 201871010111-刘佳华《面向对象程序设计(java)》第四周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第四周学习总结 实验时间 2019-9-20 第一部分:总结第四章理论知识 4.1:类与对象的概念. 类:类是构造对象的模板 ...

  4. zz姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖

    姚班天才少年鬲融凭非凸优化研究成果获得斯隆研究奖 近日,美国艾尔弗·斯隆基金会(The Alfred P. Sloan Foundation)公布了2019年斯隆研究奖(Sloan Research ...

  5. LeetCode 120. Triangle三角形最小路径和 (C++)

    题目: Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjace ...

  6. 洛谷 P1628 合并序列

    洛谷 P1628 合并序列 题目传送门 题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入格式 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100 ...

  7. 缓存原理,自己写一个缓存类(c#版)

    .net中的MemoryCache是通过内部封装一个静态Dictionary 自己写一个缓存,来看看内部怎么实现的 public class CustomerCache : ICache { priv ...

  8. read articles list

    done 如何通俗易懂地解释卷积: https://www.zhihu.com/question/22298352/answer/637156871 如何通俗易懂地理解卷积神经网路: http://w ...

  9. github git clone ssh协议 clone超慢解决方案,提高Github Clone速度

    即使进行了fq吧但是git clone ssh协议就是慢 2kb/s你能忍,坚决不能忍. github git clone ssh协议 clone超慢解决方案 151.101.72.249 globa ...

  10. Salesforce 开发整理(十一) 自定义放大镜查找效果

    有时候在自定义的visualforce页面上,需要实现系统标准的查找样式,当不能使用标准的style的时候,我们只能选择自定义实现,下面分享一个demo,预览效果如下: 实现代码,Visualforc ...