Linux環境で何かをインストールするときに、configure、make、make installという言葉がよく出てきます。
configure、make、make installという言葉はよく見るものの、アプリによって微妙に違ったりすることに疑問を感じていました。
今回じっくり調べてみてとてもすっきりしましたのでまとめます。
#これらは何者なのか
アプリをソースコードからインストールする時に使用します。
Linux環境にアプリをインストールしようとすると、大きく分けて2つの方法があります。
一つは、rpmやyumなどのコマンドを使用してパッケージとしてインストールする方法です。
もう一つがソースコードからインストールする方法です。
この後者の方法を使う際にconfigure、make、make installを使用します。
また、ソースコードからインストールするときに、必ずこのconfigure、make、make installを使用するということでもありません。
インストールするときには、README等から手順を確認する必要があります。
慣習的にこれらの方法がとられていることが多い、ということです。
#configure
$ ./configure
configure
というスクリプトファイルを実行しています(configureというコマンドがあるわけではありません)。
ソースコード中にこのスクリプトファイルが含まれているので、パスに注意して実行します。
実行することで、インストールに必要な環境変数やライブラリが正しく設定、設置されているか等がチェックされます。チェックした結果、MakeFile
が作られます。
アプリケーションをインストールする環境は様々存在するため、単一のMakeFileを準備するだけだと、環境の差異に対応するのが難しくなります。
configure
を使えば、アプリがインストールされる環境を自動的に調べ、その環境に合わせたMakeFile
を自動的に作ることができます。
多くの場合は慣例に伴い「configure」という名前がつかれていますが、別の名前で定義されている場合もあります。
README等から手順を確認しましょう。
#make
$ make
configureで作成されたMakeFileに基づいて、アプリのコンパイルが行われます。
make
コマンドは(こちらはコマンドです)オプションなし、引数なしで実行することで、MakeFile
を参照し、MakeFile内のデフォルトの処理を行います(大抵の場合はビルド処理です)。
MakeFileが作成されたパスに気を付けて実行します。
#make install
$ make install
make
コマンドによってコンパイルされたアプリをインストールします。
(結局のところは、makeしたファイル群をディレクトリにコピーしています)
make install
というコマンドは、「MakeFile」に記述された「install」というラベルから処理を実行する、という動作になります。
configure同様、多くの場合は慣例に伴い「install」と定義されていますが、別の名前で定義されている場合もあります。
#makeコマンド
$make [オプション] [ターゲット]
makeコマンドはMakeFileをもとにして実行されます。
オプションを使うことで(-f)、Makefileとして別のファイルを参照することもできます。
Makefile内の処理は、ターゲット単位で区分されています。
ターゲットを指定して実行することで、ターゲットに定義された内容のみが実際に実行されます。
ターゲットを指定しない場合は、一番上に定義されたターゲットの内容が実行されます。
代表的なターゲットがinstallやcleanとなります。