GNU make の -include2012年03月04日 03時22分32秒

GNU make には -include がある。include は常にファイルを読み込み、ファイルが存在しない場合はエラーになる。-include はファイルが存在する場合に読み込む。

この、条件式による読み込みが他の make には無い特有の動作になっている。これを用いる事により、動的に makefile の内容を変更させる時に幅を持たせることが容易になる。また、複数に分かれて書かれている makefile を複合して呼び出すことも可能になる。

単純な動作を組み合わせて例示する。


% cat Makefile
-include $(FILES)

まず、Makefile は一行のみ。

% head 1.mk 2.mk 3.mk 
==> 1.mk <==
all ::
        echo 1

==> 2.mk <==
all ::
        echo 2

==> 3.mk <==
all ::
        echo 3

そして、makefile を三つ準備した。判りやすい様にファイルの名前は、表示する数字と同じになっている。更に重要な点は :: を用いてターゲットを作成している。二重コロンを用いることにより、同じ名前の複数のターゲットを別々の位置で定義できるようになる。

gmake への引数を変えることにより、任意の makefile を実行することが出来る。


% gmake FILES=1.mk
echo 1
1
% gmake FILES='3.mk 1.mk'
echo 3
3
echo 1
1

また、同じファイルを複数回読むことも出来る。

% gmake FILES='3.mk 1.mk 2.mk 1.mk'
echo 3
3
echo 1
1
echo 2
2
echo 1
1

これを応用すると、任意のコンパイラを使いたいときや、特定のライブラリだけ一時的に入れ換えたい時などに、自動で組み込むような makefile を作れる。