Kaw*_*iKx 72 make installation
从 Windows 迁移到 Linux,我无法理解在 Linux 中安装软件的过程。在 Windows 中,当我们运行安装文件时,它会询问您希望安装程序的位置,很可能仅在程序文件文件夹中。稍后,它会编辑注册表。这在 Windows 中称为安装。Linux 中的“安装软件”究竟是什么意思?
假设我下载了源代码,对其进行了配置,然后使用make
. 现在它只是一个二进制文件,还不是一个可用的程序。它将如何“安装”?由make install
? 这个命令到底是做什么的?
sha*_*eel 63
Make 是一个通用的工作流程序,通常用于编译。但它可以用于任何事情。
当您执行诸如“make all”之类的操作时,make 程序会从名为“Makefile”的当前目录中的文件中执行名为“all”的规则。这个规则通常会调用编译器将一些源代码编译成二进制文件。
当您执行“make install”时,make 程序会获取上一步中的二进制文件并将它们复制到一些适当的位置,以便可以访问它们。与 Windows 不同,安装只需要复制一些库和可执行文件,因此没有注册表要求。简而言之,“make install”只是将编译后的文件复制到适当的位置。
sar*_*old 48
make install
做Makefile
作者想让它做的任何事情。通常,此时更改安装目录为时已晚,因为在构建过程中通常早些知道,因此可以使用正确的路径名引用帮助文件和配置文件。
许多项目使用GNU Autotools来尝试提高它们在硬件和操作系统差异之间的可移植性。(不同的 Unix 变体使用稍微不同的头文件来声明稍微偏离通常路径的函数——除了大多数程序需要在不同位置声明的一个或另一个。)
当一个项目确实使用 Autotools 时,安装它的正常口头禅是:
./configure
make
make install
Run Code Online (Sandbox Code Playgroud)
在./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
带有可用配置变量的 simple对开发人员和用户来说都容易得多。(虽然./configure ; make ; make install
这句咒语对用户来说真的很容易使用。)
关于在 Linux 上安装软件的最重要的事情是,从您的发行版安装软件更加可靠和容易(这就是它的目的!)。仅make install
在没有其他方法时才使用(也考虑替代程序)。
Windows 用户的常见错误是从不同的地方下载程序并尝试安装它们,而忘记检查它们的分发包,这些包可以通过单击或命令(在包管理器中)安装。
还要记住,Linux 上没有病毒感染的主要原因之一是(或应该)从中央(受信任)位置而不是许多随机站点安装软件。
另外要注意的是,虽然像 Ubuntu 这样的发行版总是包含过时的软件包,但也有像 Arch Linux 这样的发行版总是最新的(尽管它们实际上并不提供为 Linux 发布的所有程序,如 Debian/Ubuntu)。
至于当你使用包管理器时到底会发生什么,它会根据 FHS 和发行版自己的指导方针,以及你可能会发现的一些其他例程从包管理器的手册页。
归档时间: |
|
查看次数: |
133919 次 |
最近记录: |