各ステップが異なることを行うため
ビルドするための環境を準備(セットアップ)します
./configure
このスクリプトには、変更する必要がある多くのオプションがあります。--prefix
またはのように--with-dir=/foo
。これは、すべてのシステムが異なる構成を持っていることを意味します。また./configure
、インストールする必要がある不足しているライブラリもチェックします。ここに問題があると、アプリケーションがビルドされません。これが、ディストリビューションが異なる場所にインストールされるパッケージを持っている理由です。すべてのディストリビューションは、特定のライブラリとファイルを特定のディレクトリにインストールする方が良いと考えているからです。実行すると言われて./configure
いますが、実際には常に変更する必要があります。
たとえば、Arch Linux パッケージ サイトを見てください。ここでは、どのパッケージも異なる構成パラメーターを使用していることがわかります (ビルド システムに autotools を使用していると仮定します)。
システムの構築
make
これは実際にmake all
はデフォルトです。そして、すべてのメイクには、実行するさまざまなアクションがあります。ビルドを行う人もいれば、ビルド後にテストを行う人もいれば、外部 SCM リポジトリからチェックアウトする人もいます。通常、パラメータを指定する必要はありませんが、一部のパッケージでは異なる方法で実行されます。
システムへのインストール
make install
これにより、configure で指定された場所にパッケージがインストールされます。./configure
必要に応じて、ホーム ディレクトリを指すように指定できます。/usr
ただし、多くの構成オプションはまたはを指しています/usr/local
。つまり、sudo make install
ルートのみがファイルを /usr および /usr/local にコピーできるため、実際に使用する必要があります。
これで、各ステップが次のステップの前提条件であることがわかります。各ステップは、問題のない流れで物事を機能させるための準備です。ディストリビューションは、このメタファを使用してパッケージ (RPM、deb など) を構築します。
ここでは、各ステップが実際には異なる状態であることがわかります。そのため、パッケージ マネージャーにはさまざまなラッパーがあります。以下は、パッケージ全体を 1 ステップでビルドできるラッパーの例です。ただし、各アプリケーションには異なるラッパーがあることに注意してください (実際、これらのラッパーには、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
です。しかし、もう 1 つは SCons、Python 関連のセットアップ、または別のものを使用できます。
ご覧のとおり、各状態を分割すると、特にパッケージのメンテナーとディストリビューションにとって、保守と展開がはるかに簡単になります。