Makefile で行うことは
SRCS=$(wildcard *.c)
depend: $(SRCS)
gcc -M $(CFLAGS) $(SRCS) >depend
include depend
これは、ソース ファイルのいずれかが更新された場合、依存ルールが実行され、gcc -M を使用して依存というファイルを更新することを意味します。これは、すべてのソース ファイルの依存関係規則を提供するために、makefile に含まれます。
Make は、ファイルをインクルードする前にファイルが最新であることを確認するため、make を実行するたびに、必要に応じてこの依存ルールが実行されます。
これは、ファイルが変更されたときにいつでも実行されます。私はこれが問題だと思ったことはありませんが、ディレクトリに膨大な数のファイルがある場合、時間がかかりすぎることに気付くかもしれません。その場合は、次のように、ソース ファイルごとに 1 つの依存関係ファイルを作成してみてください:
SRCS=$(wildcard *.c)
DEPS=$(SRCS:.c=.dep)
%.dep : %.c
gcc -M $(CFLAGS) $< >[email protected]
include $(DEPS)
-M の代わりに -MM を使用して、システム ヘッダーを含めないようにできることに注意してください。
"gcc -M file.c" は必要なことを行います。
gcc -M の代替は fastdep です。 Fastdep の作成者は、fastdep が gcc の -M よりも 10 倍高速であると報告しています。プロジェクトのビルドに時間がかかる場合は、fastdep を検討する価値があります。