第5章 Makeの基本

makeは、プログラムのコンパイルに広く使われているコマンドです。どのソースコードをどのようにコンパイルすれば良いかを判断し、コンパイルに必要なコマンドを実行してくれます。makeを使うにはMakefileと呼ばれるファイルが必要です。Makefileには、コンパイルされるソースコードの依存関係や、コンパイルに必要なコマンドなどの情報が書かれています。

atmark-distのビルドシステムでもMakefileをベースとしています。ここでは、makeコマンドとMakefileの基本について簡単に説明します。

最初に練習用のディレクトリを作成します。ここでは、「maketest」という名前にします。

例 5.1. Makefile練習用のディレクトリを作成

[PC ~]$ mkdir maketest
[PC ~]$ cd maketest
[PC ~/maketest]$

次に、maketestディレクトリ内に簡単なMakefileを用意します。

例 5.2. 簡単なMakefile

hello:
         echo 'Hello World'

bye:
         echo 'Bye bye'

Makefileの中で、helloとbyeはターゲットと呼ばれます。ターゲットは必ずコロンで終わらなければいけません。ターゲットの次の行が実際に実行されるコマンドです。ここではコンパイルをせず、「Hello World」を出力するために、echoコマンドを使っています。実行されるコマンドの前はタブで始まらなければならない規則があります。

例 5.3. makeの実行

[PC ~/maketest]$ ls
Makefile
[PC ~/maketest]$ make
echo 'Hello World'
Hello World
[PC ~/maketest]$

上記は、実際にmakeコマンドを実行した例です。makeコマンドを実行すると、Makefile中の実行されるコマンド「echo ‘Hello World’」と、コマンドの結果「Hello World」が表示されます。

makeコマンドはMakefile内で定義されているターゲットを引数としてとることが可能です。指定されたターゲットをゴールと呼びます。

例 5.4. ゴールを指定してmakeを実行

[PC ~/maketest]$ make hello
echo 'Hello World'
Hello World
[PC ~/maketest]$ make bye
echo 'Bye bye'
Bye bye
[PC ~/maketest]$

makeコマンドが引数を取らない場合は、Makefile内の一番上にあるターゲットをゴールとして実行されます。このため、「make」と「make hello」では同じ動作になります。多くのMakefileでは、一番上のターゲットは「all」という名前で定義されています。

複数のゴールを羅列することもできます。この場合は、左から順に実行されます。

例 5.5. 複数のゴールを指定してmakeを実行

[PC ~/maketest]$ make hello bye
echo 'Hello World'
Hello World
echo 'Bye bye'
Bye bye
[PC ~/maketest]$

makeとMakefileの詳しい情報は、makeのマニュアルまたはinfoをご覧ください。