原文地址:http://www.cnblogs.com/Jerry-Chou/archive/2010/12/18/1909843.html

翻译一篇文章,我最早从这篇文章中了解到为什么Linux平台上,从源代码安装软件通常都需要这三步:./configure,  make,  make install 。译文如下:

我总是听人们说,通常只要使用configure, make, make install来让程序可以运行。不幸的是大多数现在用电脑的是根本没有使用过compiler,或是写过一行代码。随着图形用户接口(GUI),应用程序构建工具(application builder)的出现,现在很多真正的程序员也不用configure; make; make install了。

你所要做的有三步,每一步都会使用现有的程序使得一个新的程序就绪或运行。在make之前先要使用configure,但每一步都会有着不同的目的。接来我会解释第二步(make)和第三步(make install),之后我会再解释configure.

make这个实用工作已经成为Unix历史的一部分了。设计它的主要目的是减少程序员的记忆负担。我猜,更好的说法是它减少了程序员所需编写的文档。在任何情况下,一旦你建立了一套make可以理解的规则去创建一个程序,你就不用再惦记着他们(这套规则)了。

为了让这些工作变得简单,make实用工具有一套内建的规则,你只要告诉make构建你的程序所需的规则。举例来说,你输入了make love,make会根据你的输入寻找一些规则,如果你压根就没有建立规则,他们使用内建的规则,其中的一个内建规则就是运行Linker,找到 程序名.o 结尾文件去产生一个可执行文件。

所以,make会去到名为love.o的文件。但make并不会止步于此。即使它找到了.o文件,它还有一组规则确保.o文件是最新的。换句话说,就是比源代码文件要新。在Linux系统中,最常的源代码是用C语言所编写的以.c为后缀的文件。

如果make同时找到了.c文件(love.c)和.o文件,它会查看它们俩的时间戳来确保.o文件更加新一些,如果没有.c文件新,或是.o文件不存在,make会使用另一组内建的规则用.c文件(使用C compiler)构建一个新的.o文件。对其它类型的编程也会采用相同的规则。最终当make运行完成后,会有一个最新的可执行程序生成。

顺便提一个Unix上的笑话,来自于早期版本make。当make找不到所需的文件时,例如没有love.o,love.c或其它格式的源代码文件,make程序会说:
make: don’t know how to make love. Stop.

再回到正题,通常make使用当前目录下的Makefile。如果你有一个程序源代码文件,那边有Makefile,你可以看一看。他就内容就是普通文本。单词后跟冒号行就是目标(target),也就是你紧随make命令之后输入的东西。make根据你的不同输入执行一些不同的操作。如果你只是输入make而不跟随任何命令,第一个目标将会被执行。

在大多数make文件的开头部分,你最有可能见到的是一些类似赋值的语句。每行有很多字段,字段间用等号相连。它们用来设置make的内部变量。常见的设置如C compiler的位置,程序的版本号,等类似的东西。

现在是回到谈configure的时候了。在不同的系统中C compiler可能位于不同的位置,你可能使用zsh而不是bash作为你的shell,程序可能需要知道你的主机名,可能会使用dbm库,需要知道系统中安装的是gdbm库,还是ndbm库,等等,等等。为了完成这些配置,时常需要修改Makefile。另外一个让程序员痛苦的是:任何时候你想要在一个新的系统中安装软件,你都需要重新列举出这些配置。

伴随着越来越多的软件被开发出来,更多兼容POSIX系统出现,这些配置的工作越来越难做。这时configure出现了。它是一个shell脚本(通常用GNU Autoconf来编写),它来寻找一些工具的位置,试图看这些工具是否可以工作。之后便按照Makefile.in文件的指示生成可能在当前系统中工作Makefile(可能还有别的文件)。

背景知道介绍完了,让我们总结一下吧:

你运行configure(通常你在shell中输入./configure),这会生成一个新的Makefile文件。
    键入make命令,构建程序。他会在Makefile中找到第一个target,根据第一个target的说明来构建可执行文件。这步的目的就是生成一个可执行文件。
    现在,以root的身份键入make install。再次调用make找到一个名为install的target,根据这个target指定的文件和目录安装软件。

这是一个简化了的解释,但在大多数情况下,你知道这些就足够了。大多数程序都会有一个名为INSTALL的文件,这个文件包含了安装步骤,和一些注意事项。比如,提供一些选项给configure命令来改变最终可执行文件的目录。同时还会有其它的make target,诸如clean,用来在安装完成后执行一些清理工作。还有些时候会有test这个target,允许你在make和make install这两个步骤之间测试生成的可执行软件。

Win或Linux中编译安装软件的命令解析: configure; make; make install的更多相关文章

  1. Linux中编译安装软件的基本流程

    1. 准备软件包源文件 从互联网下载相应的软件包(以 .tar.gz 或 .tar.bz2 为后缀),将tarball文件解压到/usr/local/src目录下,并切换到软件包目录下 : 2. ./ ...

  2. linux中编译安装Apache、PHP、MySQL(上)

    1.简介 在阿里云买了个云服务器,一直没时间折腾.过了近十天了吧,才有时间好好玩玩这个云服务器.自己是做Web开发的,所以我需要的开发环境是LAMP.之前打算是采用yum安装,不过yum安装apach ...

  3. linux安装软件的几种方法----linux下编译安装软件的一般步骤

    linux安装软件的几种方法: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd so ...

  4. [转]linux中如何安装软件?

    Linux下软件的安装与卸载     在Windows下安装软件时,只需运行软件的安装程序(setup.install等)或者用zip等解压缩软件解开即可安装,运行反安装程序 (uninstall.u ...

  5. linux系统编译安装软件的通用步骤

    编译安装的步骤: 1.下载源代码,并解压     tar -xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录通常为package-version 2.切换至源码 ...

  6. Linux 下编译安装软件,找不到共享库 xx.so 的解决办法

    编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...

  7. linux 如何编译安装软件

  8. linux下编译安装php5.6出现 configure: error: Cannot find MySQL header files under /usr/local/mysql.

    #yum install gcc gcc-c++ libxml2 libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-dev ...

  9. linux下自己安装软件做成命令

    安装nodejs,从官网下下来的是一个压缩包,解压下里面有可执行文件.教程上用ln -s [可执行文件的绝对路径] [/usr/local/bin/]建了一个软连接,这样就能直接无视路径,用命令行调用 ...

随机推荐

  1. Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

    1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...

  2. 32款iOS开发插件和工具介绍[效率]

    插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过!   1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...

  3. mysql 不能启动的两种错误提示及解决方法

    在linux系统中安装mysql服务器详细步骤并解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw ...

  4. Day2平衡树笔记

    线段树不支持的操作:删除,插入 常见的平衡树 treap 慢||好写 sbt(大小平衡的树) 非常快 比较好写 ||功能不全 rbt 红黑树 特别快 || 非常难写   以上操作支持插入删除O(Nlo ...

  5. scroolspy滚动监听插件

    <nav id="nav" class="navbar navbar-default"> <a href="#" clas ...

  6. DG Cascade Standby

    SUMMARY 1. logical standby不支持cascading standby 2. 11.2.0.2之前版本cascading standby不支持RAC 3. 11.2.0.3之前版 ...

  7. 创建VG

    创建VG smit mkvg Add a Volume Group Add a Scalable Volume Group   VOLUME GROUP name                    ...

  8. (转)Linux下使用rsync最快速删除海量文件的方法

    转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...

  9. CODEVS——T1519 过路费

    http://codevs.cn/problem/1519/ 时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Desc ...

  10. Windows Server 2016 上配置 APACHE+SSL+PHP+perl

    Windows Server 2016 上配置 APACHE+SSL+PHP+perl 安装环境 谷歌云实例 Windows Server 2016 Apache Apache/2.4.25 (win ...