从 Windows 转到 Linux 后,我无法理解在 Linux 中安装软件的过程。在 Windows 中,当我们运行安装文件时,它会询问您希望将程序安装到何处,很可能仅在程序文件文件夹中。之后,它会编辑注册表。这在 Windows 中称为安装。Linux 中的“安装软件”到底是什么意思?
假设我下载了源代码,对其进行配置,然后使用 构建二进制文件make
。现在它只是一个二进制文件,还不是一个可用的程序。它将如何“安装”?通过make install
?这个命令到底是做什么的?
答案1
Make 是一个通用的工作流程序,通常用于编译。但它可以用于任何事情。
当你执行“make all”之类的操作时,make 程序会从当前目录中名为“Makefile”的文件中执行名为“all”的规则。此规则通常会调用编译器将一些源代码编译为二进制文件。
当您执行“make install”时,make 程序会获取上一步中的二进制文件,并将它们复制到一些适当的位置,以便可以访问它们。与 Windows 不同,安装只需要复制一些库和可执行文件,并且没有注册表要求。简而言之,“make install”只是将编译后的文件复制到适当的位置。
答案2
make install
按照Makefile
作者的意愿来做。通常,到了这个时候,再去改变安装目录已经太晚了,因为较早,因此可以使用正确的路径名引用帮助文件和配置文件。
许多项目使用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
只需启动它们即可。这绝对是每个项目的事情——有些,如postfix
、qmail
等,由许多不同的移动部分组成,并依赖于它们一起工作。其他的,如ls
或su
可能足够独立,可以从它们内置的目录中正常执行。(这通常没用——但有时非常有用。)
然而,并非所有项目都使用 Autotools——它们巨大的,复杂的,维护起来也很麻烦。手写的Makefile
s 写起来要简单得多,我个人认为,只要分发一个简单的Makefile
配置变量,对开发人员和用户来说都容易得多。(尽管./configure ; make ; make install
口头禅是真的当它工作时对用户来说很方便。
答案3
make install
只不过执行install
你的函数/部分Makefile
答案4
使用 bin_PROGRAMS 程序,make install 将二进制文件放入 /usr/local/bin。在安装 linux 系统时,系统可以运行的所有可执行文件都将放在 /usr/bin 中。所有用户安装的可执行文件都将通过命令 'make install' 放入 /usr/local/bin 中