gpt4 book ai didi

unix - 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?

转载 作者:行者123 更新时间:2023-12-03 04:39:55 26 4
gpt4 key购买 nike

每次从源代码编译某些内容时,都会经历相同的 3 个步骤:

$ ./configure
$ make
$ make install

我明白,将安装过程分为不同的步骤是有意义的,但我不明白,为什么这个星球上的每个编码员都必须一遍又一遍地编写相同的三个命令,只是为了获得一个命令任务完成。从我的角度来看,使用包含以下文本的源代码自动交付 ./install.sh 脚本是完全有意义的:

#!/bin/sh
./configure
make
make install

为什么人们要分开执行这 3 个步骤?

最佳答案

因为每个步骤都会做不同的事情

准备(设置)构建环境

./configure

此脚本有很多您应该更改的选项。如 --prefix--with-dir=/foo。这意味着每个系统都有不同的配置。另外 ./configure 检查是否缺少应安装的库。这里的任何错误都会导致无法构建您的应用程序。这就是为什么发行版将软件包安装在不同的位置,因为每个发行版都认为最好将某些库和文件安装到某些目录。据说要运行./configure,但实际上您应该始终更改它。

例如,看看 the Arch Linux packages site 。在这里您将看到任何包都使用不同的配置参数(假设它们正在使用构建系统的自动工具)。

构建系统

make

这实际上是默认的make all。每个品牌都有不同的操作要做。有些进行构建,有些在构建后进行测试,有些从外部 SCM 存储库进行 check out 。通常您不必提供任何参数,但有些包以不同的方式执行它们。

安装到系统

make install

这会将软件包安装到配置指定的位置。如果您愿意,可以指定 ./configure 指向您的主目录。但是,许多配置选项都指向 /usr/usr/local。这意味着您必须实际使用 sudo make install 因为只有 root 可以将文件复制到/usr 和/usr/local。

<小时/>

现在您会发现每个步骤都是下一步的先决条件。每一步都是让事情顺利进行的准备。发行版使用这个比喻来构建软件包(如 RPM、deb 等)。

在这里你会看到每一步实际上都是不同的状态。这就是包管理器有不同包装器的原因。下面是一个包装器示例,可让您一步构建整个包。但请记住,每个应用程序都有不同的包装器(实际上这些包装器的名称如spec、PKGBUILD等):

def setup:
... #use ./configure if autotools is used

def build:
... #use make if autotools is used

def install:
... #use make all if autotools is used

这里可以使用自动工具,即./configuremakemake install。但另一个可以使用 SCons、Python 相关设置或不同的东西。

正如您所见,拆分每个状态使维护和部署变得更加容易,特别是对于软件包维护者和发行版而言。

关于unix - 为什么总是./configure;制作;进行安装;作为 3 个单独的步骤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10961439/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com