複数の実行ファイルを生成するMakefileの書き方

課題で学んだことを一つメモ。

今まで複数の実行ファイルを一気に生成するMakefileの書き方が分からなかったのですが、その方法が分かりました。普通は↓のようにMakefileを書いてから、

#Makefile
TARGET1: hoge.c
     gcc -o TARGET1 -Wall hoge.c
TARGET2: moge.c
     gcc -o TARGET2 -Wall moge.c

makeコマンドの引数に個別にTARGETを指定してコンパイルすると思います。

$ make TARGET1 TARGET2

これだと一々TARGETを打ち込まなきゃいけなくてめんどくさい!そこで使うのが↓の方法です。

#Makefile
all: TARGET1 TARGET2
TARGET1: hoge.c
     gcc -o TARGET1 -Wall hoge.c
TARGET2: moge.c
     gcc -o TARGET2 -Wall moge.c

makeは引数なしで実行した場合、Makefile中の最初のTARGETのみコンパイルします。これを逆手にとって、最初のTARGETのコンパイルに他の全てのTARGETのコンパイルが必要であると指定してやればいいのです。上記の例では、allがダミーのTARGETになります。allをコンパイルするにはTARGET1とTARGET2が必要ということになるので、無事全てのTARGETがコンパイルされることになります。

ちなみにallの扱いはどうなるかというと、コンパイル方法が指定されていないので無視されます。作業環境によっては「make:'all'に対して行うべき事はありません。」みたいな警告が出るかもしれませんが、それは無視しましょう。

さってと、続きをやるかー

※インデントは全て[TAB]に直してください。エラーが出ます。