--prefix在./configure中使用时到底能做什么?


29

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

当我做一个

./configure --prefix/usr/bin/

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

对于复杂的安装,答复是否可以给出更详尽的答案,并详细说明其附带的前缀和选项。

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

我也看过

 PREFIX=/tmp/installdir make


 PREFIX=/tmp/installdir make install

如果在./configure中调用了prefix,那么为什么在这两个示例中总是这样做?

先感谢您!


一些信息在这里:GNU编码标准:目录变量
steeldriver

检查更新的答案
luv.preet

freetds.org/userguide/config.htm,这将为您提供更多帮助
luv.preet

审稿人:这是关于安装软件的。它获得了三场题为 “与Ubuntu无关”的近距离票选。如果关闭此窗口与任何 实际的 站点 策略都保持一致,则建议您发表评论。否则,即使将其关闭,也可能会重新打开它。
伊莱亚·卡根

Answers:


32

使用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感兴趣。


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.