--prefix 在 ./configure 中使用时到底起什么作用?

--prefix 在 ./configure 中使用时到底起什么作用?

所以我只是想问一个简单的问题,这可能会让我看起来很蠢,但我正在学习

当我做

./configure --prefix/usr/bin/

前缀是做什么的?这只是将包安装到该位置吗

并且,答复是否可以对复杂的安装提供更详细的答案,并详细解释与之相关的前缀和选项。

如果我要运行 apt-get install,我该如何将其安装到带有前缀的特定位置

我也见过

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

如果在 ./configure 中调用了前缀,为什么在这两个例子中总是会出现它?

先感谢您!

答案1

使用make install或安装软件时sudo make install,不同的文件将放置在不同的目录中。提供用户要运行的命令的可执行文件通常位于目录中bin,库通常位于lib目录中,手册页通常位于man目录中,等等。

当你跑步时./configure--prefix选项允许您指定那些目录是. 之所以这样称呼,是--prefix因为它允许你给出字首出现在要安装您正在构建的程序或库文件的每个目录的路径中。大多数configure脚本都支持--prefix,省略它并直接运行./configure通常相当于./configure --prefix=/usr/local

为了更全面地回答这个问题,我摘录了我的答案如何“全局”安装 tar 文件?(在Unix 和 Linux),专门针对这个问题:

配置您的构建

./configure 如果您拥有通过运行和编译的源代码make,则通常会使用make install(或sudo make install)来安装它。这会将文件从构建目录复制到安装位置。当您要安装的内容提供可执行命令时,这些可执行文件通常会复制到 或 中的目录中,$PATH您应该考虑将其添加到 $PATH

尽管构建和安装软件通常很简单,只需运行./configuremake,有时make checkmake test,然后make installsudo make install,但有时您需要将选项传递给configure脚本来配置构建。特别是,正如 pfnuesel 所说,这是你配置的方式 在哪里软件将被安装。尽管该make install步骤实际上安装了软件,但所有内容的安装位置通常都在 ./configure步骤中确定。

最常见的选项是--prefix。当您不知道configure使用什么时,默认前缀通常是/usr/local。(有时,程序或库的源代码默认为其他前缀。幸运的是,这种情况很少见。)

因此./configure通常等同于./configure --prefix=/usr/local。要将软件安装到您的主目录中,您可以使用./configure --prefix=/home/galahad(如果/home/galahad是您的主目录)或--prefix="$HOME"。然后当然您仍然必须使用 构建和安装软件make。我应该说并非所有以源代码形式分发的软件都是以这种方式构建的。您应该始终在提取的源代码存档中查找文档。

含义--prefix

当你运行时,你表明该软件应该安装在 ./configure --prefix=directorydirectory目录。但这很少(如果有的话)将松散的文件放在directory而是将不同用途的文件放在directory。如果这些子目录不存在,它会创建它们。

可执行文件通常放在 中directory/bin,但directory/sbin如果它们通常用于系统管理,或者 directory/games如果它们是游戏,则可能放在 中(如今这种情况很少见)。库放在 中 directory/lib或其他类似命名的目录,如 directory/lib32。头文件放在 中 directory/include。手册页放在 中 directory/man。软件使用的数据文件放在 中 directory/share

这就是它的意义directory成为一个字首。它是包含将安装不同文件的位置的父目录。因此它看起来是前缀在里面绝对路径make install 通过运行或创建的大多数文件和目录sudo make install

但也有一些例外。系统范围的配置文件(有时在安装将使用它们的软件时创建,但并非总是如此)通常位于 中/etc。这通常不会受到指定不同前缀的影响。即使您在 中安装了很多软件/usr/local,它仍然会主要使用 /etc,并且您的/usr/local/etc目录可能不存在、为空或包含很少的文件。

在许多系统上,您可以通过运行来找到有关典型文件系统布局的更多信息man hier。如果您使用的是 GNU/Linux 系统,您可能会对文件系统层次标准

答案2

它告诉配置当前包或软件所需的东西的位置。

就像在简单情况下一样,它可以告诉 ssl 库的位置:

--with-libssh2=/usr/local  #used in configuring nagios

它还告诉您不需要配置哪些包,以便根据您的系统对程序进行合适的编译:

--disable-shared  # used in configuring nagios
--disable-link-balancer  # used in configuring Firehol

这些只是使编译适合您的系统的一些额外选项。这是我的想法。如果有其他问题,请纠正我。

--prefix=PREFIX选项将安装与体系结构无关的文件PREFIX。当您运行make install命令时,库将被放置在PREFIX/lib目录中,可执行文件将被放置在PREFIX/bin目录中,等等。

如果未将此参数传递给configure命令,则默认值为/usr/local

相关内容