网站首页 > 技术文章 正文
前言
无论新手老手,只要看过关于Linux中编译安装的文章,其中必然会提及 ./configure、make、make install 三个命令,有的可能没有./configure(用其他的代替了,例如Mysql5.7就使用cmake),但至少有两个。
初步认识
这些命令都是典型的、使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。
1、./configure :检测你的安装环境的,如果软件安装需要一些特定的依赖和软件,则此命令运行结果中会有提示。
2、make :编译软件,它从Makefile中读取指令,然后编译。
3、make install:安装软件,它也从Makefile中读取指令,安装到指定的位置。
深入了解
1、configure脚本
用来生成 Makefile 文件,该文件为下一步的编译做准备。
一般来说,configure 后是可以加参数的,这些参数会对安装做一些限制,如安装目录、权限、用户、模块等等,如果你想知道具体参数和含义,可以在终端中执行:
./configure --help
如上图,执行结果中会详细说明每个参数及含义,我这里是以Nginx1.20.1为演示的,因为参数太多,这里只放出了一部分。
2、make命令
编译。大多数的源代码包都会经过这一步操作来进行编译。
如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL文件 中有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码,根据提示安装即可。
如果你遇到的错误是:make *** 没有指明目标并且找不到 makefile,那说明我们在这一步之前没有使用./configure。
3、make install命令
进行具体的安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你拥有 root 权限(因为要向系统写入文件)。
有时候我们可以编译和安装一起执行:
make && make install
扩展说明
make命令可不仅仅只有无参和install两种哦。
在上面我们已经知道了,当执行./configure脚本文件后,会生成makefile文件。而make命令恰恰是针对这个文件进行操作的。
下面我逐一为大家介绍下具体参数及含义:
1、make all:生成可执行文件,后面all可以省略。执行后开始编译原始码,然后连接,并且产生可执行文件。
2、make clean:用来清除编译产生的可执行文件及目标文件(object file,*.o)。
3、make distclean:make clean的高级版,除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
4、make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径中。
5、make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义来生成的。
6、make distcheck:make dist高级版,除基础功能外,还加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境的人去重新编译。
总结
一般我们常用的就是./configure、make与make install三个命令,必须要记牢和了解。
其他的可以知道,具体使用时再去查手册。
猜你喜欢
- 2025-03-19 测试老鸟浅谈unittest和pytest的区别
- 2025-03-19 Mac下安装redis相关jia教程(mac电脑安装redis)
- 2025-03-19 Linux OpenSSH9.7p1最新版升级操作详细教程
- 2025-03-19 什么是OpenSSL?(什么是openAI技术)
- 2025-03-19 Redis安装和开机自启,看这一篇就够了
- 2025-03-19 Express 系列:结合实例讲解如何开发一个自己的npm包
- 2025-03-19 1000行C语言搓出GPT-2!AI大神Karpathy新项目刚上线就狂揽2.5k星
- 2025-03-19 让人开心一笑的 Linux 搞怪命令(有趣的linux命令)
- 2025-03-19 离线安装OpenMolcas-v22.06(离线安装pip)
- 2025-03-19 扒一扒鸿蒙中的Gn与Ninja(鸿蒙很牛吗)
- 04-29kali2021ping 外网不通
- 04-29我是如何用这3个小工具,助力小姐姐提升100%开发效率的
- 04-29注册下载啊
- 04-29Spring 中三种 BeanName 生成器!
- 04-29mysql学习9:创建数据库
- 04-29Linux之yum源详解
- 04-29夏日终曲/请以你的名字呼唤我/Call me by your name(无剧透)
- 04-29注释竟然还有特殊用途?一文解惑 //go:linkname 指令
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- sqlset (59)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)