Linux命令详解./configure、make、make install 命令学习

文章来自Linux命令详解./configure、make、make install 命令-CSDN博客

文章目录
1 编译安装命令详解
1.1 简介
1.2 详细解释
1.2.1 configure命令
1.2.2 make
1.2.3 make insatll
1.2.4 configure和make中的DESTDIR和PREFIX区别
1.2.4.1 configure中的PREFIX
1.2.4.2 make install中的DESTDIR
1.2.4.3 make install中的PREFIX
1.2.4.4 二者区别
1.2.5 make中使用PREFIX没有生效
1.3 扩展说明
1 编译安装命令详解
1.1 简介
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤。
./configure是源代码安装的第一步,用来检测安装平台的目标特征的。主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系,但并不是所有的tar包都是源代码的包
./configure会检测是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本

make 是用来编译的,它从Makefile或者makefile(Linux区分大小写)中读取指令,然后编译。
make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置。
注意:AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西。

1.2 详细解释
1.2.1 configure命令
这一步是配置,一般用来生成 Makefile,为下一步的编译做准备,可以通过在configure 后加上参数来对安装进行控制
比如代码:./configure --prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin ,资源文件就会安装在 /usr/share,如果没有使用--prefix指定路径那么都是走默认路径:

可执行文件默认放在/usr/local/bin中
库文件默认放在/usr/local/lib中
配置文件默认放在/usr/local/etc中
资源文件默认放在/usr/local/share中
点击了解Linux各个目录说明

同时一些软件的配置文件可以通过指定 --sys-config= 参数进行设定。有一些软件还可以加上 --with、--enable、--without、--disable 等等参数对编译加以控制,可以通过允许 ./configure –help 察看详细的说明帮助。./configure --help里面有个path可以查看默认安装路径

1.2.2 make
这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)
如果在make过程中出现error,就要记下错误代码(注意不仅仅是最后一行),然后可以向开发者提交 bugreport(一般在INSTALL里有提交地址),或者系统少了一些依赖库等,这些需要自己仔细研究错误代码。

可能遇到的错误:make *** 没有指明目标并且找不到 makefile, 停止。问题很明了,没有Makefile,怎么办,原来是要先./configure 一下,再make

1.2.3 make insatll
这条命令来进行安装(当然有些软件需要先运行make check 或 make test 来进行一些测试),这一步一般需要有root权限(因为要向系统写入文件)
指定文件安装位置:

make PREFIX=/usr/local/redis install:是指安装到指定的redis目录下
make DESTDIR=/install/directory install:是和上面同理
其中的 prefix 和 destdir 是两个常用的参数,用于指定安装路径和临时安装目录的区别。

prefix:是一个在构建软件时指定的参数,用于指定软件在安装时的根目录。它通常用于指定软件的安装路径的前缀,例如 /usr/local 或 /opt。在执行 make install 时,软件会按照指定的 prefix 值将文件和目录安装到对应的位置。
destdir:是一个在执行 make install 时指定的参数,用于指定临时安装目录。它通常用于在构建软件时进行测试或打包,而不是直接安装到最终的目标路径。通过指定 destdir,软件会将文件和目录安装到指定的临时目录中,而不是真正的目标路径。
示例:假设 prefix 设置为 /usr/local,而 destdir 设置为 /tmp/install,执行 make install 后,软件的文件和目录将被安装到 /tmp/install/usr/local 目录中,而不是直接安装到 /usr/local。
注意:此步骤不是必须的,因为在上一步make命令中就已经编译出了可执行的文件了,此时的make insatll只是为了安装到Linux系统中常用的位置上,因为从那个目录下运行程序有些不便

1.2.4 configure和make中的DESTDIR和PREFIX区别
1.2.4.1 configure中的PREFIX
./configure --prefix=*
确定包在安装时的位置,以及在运行时查找相关文件的位置。如果只是为了在单个主机上使用而进行编译,那么应该使用它

注意:如果不配置该选项,安装后比较凌乱,如下:

可执行文件默认放在/usr/local/bin中
库文件默认放在/usr/local/lib中
配置文件默认放在/usr/local/etc中
资源文件默认放在/usr/local/share中
1.2.4.2 make install中的DESTDIR
make install DESTDIR=*
安装到临时目录,该目录不是运行包的位置。
例如,这在构建deb包时使用。构建包的人实际上并没有将所有东西都安装到自己系统的最终位置。他可能已经安装了一个不同的版本,不想打扰它,或者他甚至不是根用户。
因此,使用configure --prefix=/usr,以便程序在运行时希望安装在/usr中,然后让install DESTDIR=debian/tmp实际创建目录结构

1.2.4.3 make install中的PREFIX
make install PREFIX=/foo/bar/baz
这将把它安装到另一个地方,但不会像DESTDIR=/foo/bar/baz那样创建所有目录,它通常与GNU stow一起使用:./configure --prefix=/usr/local && make && sudo make install prefix=/usr/local/stow/foo,它将在/usr/local/stow/foo/bin中安装二进制文件。
相比之下,make install DESTDIR=/usr/local/stow/foo将在/usr/local/ local/bin中安装二进制文件

1.2.4.4 二者区别
DESTDIR和DESTDIR联用:当使用./configure --prefix和make install DESTDIR,则目标安装目录为DESTDIR/prefix

make install prefix=/foo/bar/baz和make install DESTDIR的区别在于,前者不会创建prefix后面指定的所有目录层级,而DESTDIR会

1.2.5 make中使用PREFIX没有生效
如果解压缩后的文件中有configure,是使用./configure --prefix指定安装地方,否则就是默认的/usr/local/下面,这个时候如果在使用make PREFIX=path install 不会生效,因为配置时已经指定了安装地址了,因此这一步不会生效了
如果解压缩后的文件中没有configure,但是相应的有Makefile或makefile,那么就可以使用make PREFIX=path install 来指定路径

具体原因:

在执行./configure --prefix=新路径时,是在配置阶段就指定了安装路径,这个路径会被写入到生成的 Makefile 文件,该文件包含了编译和安装的指令。当执行make install时,它会按照Makefile中的指令进行操作。
而 make install prefix 是在安装阶段尝试改变安装路径。
但是,由于 Makefile 已经在配置阶段就固定了安装路径,所以在安装阶段再尝试改变是无效的。如果你想改变安装路径,应该在配置阶段就使用 ./configure --prefix 来指定,然后,在执行make install时,它会自动将软件安装到指定的路径中。

1.3 扩展说明
Linux的用户可能知道,在Linux下安装一个应用程序时,一般先运行脚本configure,然后用make来编译源程序,在运行make install,最后运行make clean删除一些临时文件。使用上述三个自动工具,就可以生成configure脚本。运行configure脚本,就可以生成Makefile文件,然后就可以运行make、make install和make clean

configure是一个shell脚本,它可以自动设定源程序以符合各种不同平台上Unix系统的特性,并且根据系统参数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。这时,就可运行configure脚本了,运行configure脚本,就可产生出符合GNU规范的Makefile文件了: $ ./configure,到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。

$ make
$ make install  #注:运行这个要有足够的权限
$ make clean
1
2
3
利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。
make clean:清除编译产生的可执行文件及目标文件(object file,*.o)
make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。
make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。
make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。
————————————————
版权声明:本文为CSDN博主「爱吃牛肉的大老虎」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012060033/article/details/105134757

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sfp8472学习CDR

1,cdr名称解释 因为光信号传输至一定距离的时候,通常是长距离传输,其波形会出现一定程度的失真,接收端接收到的信号是一个个长短不一的脉冲信号,这个时候在接收端,我们就无法得到我们需要的数据。所以,这个时候就需要有信号的再生,信号的再生功能为再放大、再整形和再…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-2稳定性分析Stability

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-2稳定性分析Stability 0. 序言1. 稳定的分类2. 稳定的对象3. 稳定的系统4. 系统稳定性的讨论5. 补充内容——Transfer Function(传递函数) - nonzero Initial Condition(非零初始…

高防IP防御效果怎么样,和VPN有区别吗

高防IP主要是用于防御网络攻击,可以抵御各种类型的DDoS攻击,隐藏源IP地址,提高网络安全性和用户体验。主要目的是解决外部网络攻击问题,保护网络安全,避免因攻击而导致的业务中断和数据泄露等问题。 而VPN则是一种可以…

ubuntu20 安装docker

一.官网安装文档 (基本按官方文档安装) Install Docker Engine on Ubuntu | Docker Docs 二.安装步骤 1.docker 需要64位操作系统、linux内核要在3.1以上 #uname -r 2.卸载可能存在的旧版本 #sudo apt-get remove docker docker-engine docker-ce …

《Mamba: Linear-Time Sequence Modeling with Selective State Spaces》阅读笔记

论文标题 《Mamba: Linear-Time Sequence Modeling with Selective State Spaces》 作者 Albert Gu 和 Tri Dao 初读 摘要 Transformer 架构及其核心注意力模块 地位:目前深度学习领域普遍的基础模型。 为了解决 Transformers 在长序列上的计算效率低下的问题…

【193】Java8调用POI 5.2.5生成带图片的Excel文件

本文假定 Excel 文件中保存的是员工数据,并且数据中带有员工的头像。代码支持的图片格式有png、bmp、jpg、gif。但是这里需要注意,有些网站上下载的图片虽然后缀名是 jpg,但是文件二进制内容的格式是 WebP 的。Java8 目前官方api不支持 WebP …

【代码随想录算法训练营-第四天】【链表】24,19, 面试题 02.07,142

24. 两两交换链表中的节点 第一遍-递归-小看了一下题解 思路: 读了两遍题目才理解…相邻节点的交换,这个操作很容易实现,但需要一个tmpNode因为是链表的题目,没开始思考之前先加了dummyNode,还真管用把dummyNode作为…

空气质量数据和气象数据

1、北京、上海、广州的空气质量数据和气象数据 要素如下: 逐日数据 时间跨度:2014.1.1-2022.3.31,共3012条数据 数据质量:98% 城市:只有北京、上海、广州 可以用作论文数据 数据来源:中国环境监测总站…

23. 合并 K 个升序链表 --力扣 --JAVA

题目 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 解题思路 对每个链表的首节点进行比较,获取当前的最小节点;将每个阶段的最小节点进行链接; 代码展示 c…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 国赛选手带你看Elasticache Serverless

抛砖引玉 讲一下作者背景,曾经参加过国内世界技能大赛云计算的选拔,那么在竞赛中包含两类,一类是架构类竞赛,另一类就是TroubleShooting竞赛,对应的分别为AWS GameDay和AWS Jam,想必也有朋友玩过此类竞赛&…

4.权限特权转移代码

核心文件用户文件引导文件 核心文件 ;------------------------新增--------------------------------; 本文件涉及了权限, 将使用调用门描述符来处理 低权限到高权限的转移;------------------------权限---------------------------- ;此文件延用上个CORE.asm. 并做出一些修…

[linux] 解压缩xz

在Linux命令行中解压缩.xz文件,你可以使用以下几种方法: 使用unxz工具: unxz filename.xz 这个命令会将filename.xz解压缩为一个同名的未压缩文件。如果原文件有其他的扩展名(如.tar.xz),那么这个扩展名会被…

关于洛谷P1007最快的方法

P1007 独木桥 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景&#xf…

智能仪表板DevExpress Dashboard v23.1 - 支持自定义样式创建

使用DevExpress Analytics Dashboard,再选择合适的UI元素(图表、数据透视表、数据卡、计量器、地图和网格),删除相应参数、值和序列的数据字段,就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设…

STM32 配置TIM定时中断常用库函数

单片机学习! 目录 ​编辑 1. 函数TIM_DeInit 2. 函数TIM_TimeBaseInit 配置时基单元 3. 函数TIM_TimeBaseStructInit 4. 函数TIM_Cmd 运行控制 5. 函数TIM_ITConfig 中断输出控制 6. 时基单元的时钟选择函数 6.1 函数TIM_InternalClockConfig 6.2 函数 TIM…

Configuring environment||ROS2环境配置

Goal: This tutorial will show you how to prepare your ROS 2 environment. Tutorial level: Beginner Time: 5 minutes ROS 2 relies on the notion (concept)of combining workspaces using the shell environment. “Workspace” is a ROS term …

C++进阶篇8---智能指针

一、引言 为什么需要智能指针? 在上一篇异常中,关于内存释放,我们提到过一个问题---当我们申请资源之后,由于异常的执行,代码可能直接跳过资源的释放语句到达catch,从而造成内存的泄露,对于这种…

C# Winform 日志系统

目录 一、效果 1.刷新日志效果 2.单独日志的分类 3.保存日志的样式 二、概述 三、日志系统API 1.字段 Debug.IsScrolling Debug.Version Debug.LogMaxLen Debug.LogTitle Debug.IsConsoleShowLog 2.方法 Debug.Log(string) Debug.Log(string, params object[]) …

数据结构之内部排序

目录 7-1 直接插入排序 输入格式: 输出格式: 输入样例: 输出样例: 7-2 寻找大富翁 输入格式: 输出格式: 输入样例: 输出样例: 7-3 PAT排名汇总 输入格式: 输出格式: 输入样例: 输出样例: 7-4 点赞狂魔 输入格式: 输出格式: 输入样例&a…

RabbitMQ在国内为什么没有那么流行?

MQ(消息队列)的世界。MQ,就像是一个巨大的邮局,负责在不同服务或应用间传递消息。它可以帮助我们解耦系统,提高性能,还能做到异步处理和流量削峰。 基本使用 RabbitMQ是一个开源的消息代理和队列服务器&a…