‘make install’ 起什么作用?

‘make install’ 起什么作用?

从 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只需启动它们即可。这绝对是每个项目的事情——有些,如postfixqmail等,由许多不同的移动部分组成,并依赖于它们一起工作。其他的,如lssu可能足够独立,可以从它们内置的目录中正常执行。(这通常没用——但有时非常有用。)

然而,并非所有项目都使用 Autotools——它们巨大的复杂的,维护起来也很麻烦。手写的Makefiles 写起来要简单得多,我个人认为,只要分发一个简单的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 中

相关内容