1. ホーム
  2. dependencies

[解決済み] Makefile、ヘッダーの依存性

2022-10-21 18:51:09

質問

例えば、次のようなルールのmakefileがあるとします。

%.o: %.c
 gcc -Wall -Iinclude ...

ヘッダーファイルが変更されるたびに、*.oを再構築したい。依存関係のリストを作成するのではなく、ヘッダーファイルが変更されるたびに /include にあるヘッダーファイルが変更されるたびに、 ディレクトリ内のすべてのオブジェクトがリビルドされなければなりません。

これに対応するためにルールを変更する良い方法が思いつかないので、提案に応じます。ヘッダーのリストがハードコーディングされる必要がない場合は、ボーナスポイントがあります。

どのように解決するのですか?

GNUコンパイラを使用している場合、コンパイラが依存関係のリストを組み立ててくれます。Makefileの断片です。

depend: .depend

.depend: $(SRCS)
        rm -f "$@"
        $(CC) $(CFLAGS) -MM $^ -MF "$@"

include .depend

または

depend: .depend

.depend: $(SRCS)
        rm -f "$@"
        $(CC) $(CFLAGS) -MM $^ > "$@"

include .depend

ここで SRCS はソースファイルの全リストを指す変数です。

また、ツール makedepend というツールもありますが、私は gcc -MM