Win或Linux中编译安装软件的命令解析: configure; make; make install
原文地址: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的更多相关文章
- Linux中编译安装软件的基本流程
1. 准备软件包源文件 从互联网下载相应的软件包(以 .tar.gz 或 .tar.bz2 为后缀),将tarball文件解压到/usr/local/src目录下,并切换到软件包目录下 : 2. ./ ...
- linux中编译安装Apache、PHP、MySQL(上)
1.简介 在阿里云买了个云服务器,一直没时间折腾.过了近十天了吧,才有时间好好玩玩这个云服务器.自己是做Web开发的,所以我需要的开发环境是LAMP.之前打算是采用yum安装,不过yum安装apach ...
- linux安装软件的几种方法----linux下编译安装软件的一般步骤
linux安装软件的几种方法: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd so ...
- [转]linux中如何安装软件?
Linux下软件的安装与卸载 在Windows下安装软件时,只需运行软件的安装程序(setup.install等)或者用zip等解压缩软件解开即可安装,运行反安装程序 (uninstall.u ...
- linux系统编译安装软件的通用步骤
编译安装的步骤: 1.下载源代码,并解压 tar -xf package-version.tar.{gz|bz2|xz} 注意:展开后的目录通常为package-version 2.切换至源码 ...
- Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...
- linux 如何编译安装软件
- 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 ...
- linux下自己安装软件做成命令
安装nodejs,从官网下下来的是一个压缩包,解压下里面有可执行文件.教程上用ln -s [可执行文件的绝对路径] [/usr/local/bin/]建了一个软连接,这样就能直接无视路径,用命令行调用 ...
随机推荐
- Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))
1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...
- 32款iOS开发插件和工具介绍[效率]
插件和工具介绍内容均收集于网络,太多了就不一一注明了,在此谢过! 1.Charles 为了调试与server端的网络通讯协议.经常须要截取网络封包来分析. Charles通过将自己设置成系统的网络 ...
- mysql 不能启动的两种错误提示及解决方法
在linux系统中安装mysql服务器详细步骤并解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passw ...
- Day2平衡树笔记
线段树不支持的操作:删除,插入 常见的平衡树 treap 慢||好写 sbt(大小平衡的树) 非常快 比较好写 ||功能不全 rbt 红黑树 特别快 || 非常难写 以上操作支持插入删除O(Nlo ...
- scroolspy滚动监听插件
<nav id="nav" class="navbar navbar-default"> <a href="#" clas ...
- DG Cascade Standby
SUMMARY 1. logical standby不支持cascading standby 2. 11.2.0.2之前版本cascading standby不支持RAC 3. 11.2.0.3之前版 ...
- 创建VG
创建VG smit mkvg Add a Volume Group Add a Scalable Volume Group VOLUME GROUP name ...
- (转)Linux下使用rsync最快速删除海量文件的方法
转自 : http://www.ha97.com/4107.html 昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我 ...
- CODEVS——T1519 过路费
http://codevs.cn/problem/1519/ 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Desc ...
- Windows Server 2016 上配置 APACHE+SSL+PHP+perl
Windows Server 2016 上配置 APACHE+SSL+PHP+perl 安装环境 谷歌云实例 Windows Server 2016 Apache Apache/2.4.25 (win ...