汎用的な Makefile

Makefile」は、コンパイルとビルドにおける
依存関係やビルドオプション などのルールを記述しておくためのファイルです。
make コマンドが読み込んで処理を行います。

Linux豆知識 Makefile ファイル

Makefile ファイルの基本文法は下記のようになっている。

ターゲットのファイル: 依存するファイル
[TAB] 処理

処理の文頭は[TAB]です。
C言語のつもりで空白にすると、文法エラーになる。
エディタにて タブを空白に置換する設定をしていて、はまった。

具体的には、下記のように記述する。

test: test.o
gcc test.o -o test
test.o: test.c
gcc -c test.c -o test.o

ソースファイルが多くなってくると、一々 記述するのは面倒。
汎用的な Makefile でまとめて処理して欲しい。

下記を試してみた。

万能 makefile ができるまで

まとめて処理はしてくれる。
しかし、ソースファイルと同じディレクトリにオブジェクトファイルを生成するのが気にいらない。
オブジェクトファイルは obj ディレクトリに生成して欲しい。

Github にあるプログラムをいくつか試していた。
たまたまですが、下記のプログラムがそのようになっていた。

github Tetris

そこの Makefile を整理して、汎用的な Makefile を作った。
ヘッダーファイルとソースファイルは src ディレクトリに置く。
オブジェクトファイルは obj ディレクトリに生成する。
オブジェクトファイルは deps ディレクトリに生成する。
実行ファイルは bin ディレクトリに生成する。

作った MakefileGithub に公開した。 https://github.com/ohwada/MAC_cpp_Samples/tree/master/make/general