$ ./configure $ make $ make install
我理解,将安装过程分为不同的步骤是有道理的,但我不明白,为什么每个编码器在这个星球上必须写相同的三个命令一次又一次只是为了完成一个单一的工作。从我的角度来看,使用包含以下文本的源代码自动提供./install.sh脚本是完全有道理的:
#!/bin/sh ./configure make make install
为什么人们会分别做3个步骤?
准备(设置)环境的建设
./configure
此脚本有很多选项,您应该更改。像–prefix或–with-dir = / foo。这意味着每个系统都有不同的配置。另外./configure检查应该安装的缺少库。这里的任何错误都不会构建你的应用程序。这就是为什么distros有安装在不同地方的包,因为每个发行版都认为最好安装某些库和文件到某些目录。据说运行./configure,但实际上你应该总是改变它。
例如看看the Arch Linux packages site.这里你会看到任何包使用不同的配置参数(假设他们使用自动工具为构建系统)。
构建系统
make
这实际上是默认所有。每一个make都有不同的行动。一些做建筑,一些做建筑后的测试,一些做从外部SCM存储库签出。通常你不必给任何参数,但是一些包执行它们不同。
安装到系统
make install
这将在使用configure指定的位置安装软件包。如果你想要你可以指定./configure指向你的主目录。但是,许多配置选项指向/ usr或/ usr / local。这意味着你必须使用实际的sudo make install,因为只有root可以将文件复制到/ usr和/ usr / local。
现在您看到每个步骤是下一步骤的前提条件。每一步都是一个准备,使事情在无事故的流程中工作。 Distros使用这个隐喻来构建包(如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
这里可以使用autotools,意味着./configure,make和make install。但另一个可以使用SCons,Python相关的设置或不同的东西。
正如你看到的分裂每个状态使维护和部署更容易,特别是对于软件包维护者和发行版。