--prefix 在 ./configure 中使用时究竟做了什么?

46 configure

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

当我做一个

./configure --prefix/usr/bin/
Run Code Online (Sandbox Code Playgroud)

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

并且回复是否可以为复杂的安装提供更多详细的答案,并详细解释与之配套的前缀和选项。

如果我要运行 apt-get 安装,我将如何将它安装到带有前缀的某个位置

我也看过

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install
Run Code Online (Sandbox Code Playgroud)

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

先感谢您!

Eli*_*gan 58

使用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

尽管构建和安装软件通常就像运行./configure, make,有时make checkmake test,然后make install或一样简单,但有时sudo 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=directorydirectorydirectorydirectory

可执行文件通常会进入directory/bin,但directory/sbin如果它们通常用于系统管理,它们可能会进入,或者directory/games如果它们是游戏,它们可能会进入(现在很少见) 。库进入 directory/lib或另一个类似命名的目录,如 directory/lib32. 头文件进去 directory/include。手册页进去 directory/man。软件使用的数据文件进入 directory/share

这意味着什么directory是一个前缀。它是包含将安装不同文件的位置的父目录。因此,它在通过运行 或创建的大多数文件和目录的绝对路径显示为前缀make installsudo make install

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

在许多系统上,您可以通过运行man hier. 如果您使用的是 GNU/Linux 系统,您可能对Filesystem Hierarchy Standard感兴趣。