“安装”功能是什么?


52

从Windows迁移到Linux,我无法理解在Linux中安装软件的过程。在Windows中,当我们运行安装文件时,它会询问您希望在哪里安装程序,很可能仅在program files文件夹中。稍后,它将编辑注册表。这在Windows中称为安装。Linux中的“安装软件”到底是什么意思?

假设我下载了源代码,对其进行了配置,然后使用来构建二进制文件make。现在,它只是一个二进制文件,而不是可用的程序。如何进行“安装”?由make install?该命令的作用是什么?


1
我对stackoverflow.com/questions/528399/…的回答make install从程序员的角度简要概述了通过步骤完成的常见事情。
dmckee

Answers:


44

Make是通用的工作流程程序,通常用于编译。但是它可以用于任何东西。

当您执行“ make all”之类的操作时,make程序将从当前目录中名为“ Makefile”的文件中执行名为“ all”的规则。该规则通常调用编译器将一些源代码编译为二进制文件。

当您执行“ make install”时,make程序将从上一步获取二进制文件并将其复制到一些适当的位置,以便可以对其进行访问。与在Windows上不同,安装仅需要复制一些库和可执行文件,因此没有注册表要求。简而言之,“进行安装”只是将编译的文件复制到适当的位置。


4
从技术上讲,注册表不是必需的 -所有安装程序添加的只是一项便捷功能,就像Linux中的程序包管理器数据库一样,适合那些希望能够卸载软件的人。
grawity

2
@grawity实际上,在Windows中,出于多种原因(例如集成),需要编辑注册表。在Linux中,将软件彼此集成通常仅涉及通过安装后脚本之类的文件复制文件或向配置文件添加行。
卡米洛·马丁

@sharjeel这将是有益的,告诉我如何才能找到命名规则allMakefile,哪些该节的外观的结束标记喜欢,所以我能看到规则处理all站。
Pro Backup

36

make installMakefile作者想要做的一切。通常,到此为止,更改构建目录已经太晚了,因为在构建过程中通常会更早地知道它,因此可以使用正确的路径名来引用帮助文件和配置文件。

许多项目使用GNU Autotools尝试改善它们在硬件和操作系统差异之间的可移植性。(不同的Unix变体使用略有不同的标头来声明稍微偏离通常路径的函数,但大多数程序需要一个或另一个在不同位置声明的函数。)

当项目确实使用Autotools时,通常的安装方法是:

./configure
make
make install

./configure通常允许你使用像命令行选项--prefix /opt/apache或类似指定一个不同的路径名的东西。/usr/local/是常见的默认值prefix。对于本地构建的软件而言,将其存放在一个地方要容易得多,而对发行版本提供的软件则更容易存放在“主目录”中:/usr/ /bin/等等。(打包程序非常小心,切勿触摸文件/usr/local/-他们知道该文件仅供系统管理员使用。)

无论如何,./configure --prefix /path/to/new/prefix都会在中设置一个变量,该变量在Makefile编译程序,修改手册页时可用,以便它们指向文件的正确位置,修改配置文件等。因此,make将专门针对所需的安装位置构建软件,并make install将其安装到该位置。

即使没有最后make install一步,大多数程序也可以运行- ./program_name经常会启动它们。这绝对是每个项目的工作-,例如postfixqmail等等,是由许多不同的移动部件组成的,并依靠它们共同协作。其他类(例如lssu可能具有足够的独立性,可以从其内置目录中很好地执行)。(这通常不是有用的,但有时非常有用。)

但是,并非所有项目都使用Autotools-它们庞大复杂且难以维护。手写Makefiles 的编写要简单得多,而且我个人认为,仅分发Makefile带有可用配置变量的简单代码,对开发人员和用户而言都容易得多。(尽管该./configure ; make ; make install咒语在工作时对用户来说确实很容易。)


19

make install然后执行您的install函数/部分Makefile


对,它就像一样make clean,基本上它只是执行该部分下的代码。
Wulfric Lee

8

关于在Linux上安装软件,要提到的最重要的一点是,从您的发行版安装软件更加可靠和容易(这就是目的!)。仅make install在没有其他方法的情况下使用(还应考虑其他程序)。

Windows用户的常见错误是从不同位置下载程序并尝试安装它们,而忘记了签出他们的分发软件包,这些软件包可以通过单击或命令安装(在软件包管理器中)。

还请记住,在Linux上没有病毒感染的主要原因之一是(或应该)从中央(受信任)位置而不是许多随机站点安装软件。

需要特别注意的是,尽管Ubuntu之类的发行版始终包含过时的软件包,但Arch Linux之类的发行版始终都是最新的(尽管它们实际上并不提供针对Linux发行的每个程序,例如Debian / Ubuntu)。

至于使用包管理器时会发生什么,它会检查依赖关系,下载包,解压缩,根据FHS和发行版自己的指南将所有文件放到适当的目录中,以及一些您可能会发现的例程。从程序包管理器的手册页中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.