このWebページからmakeマニュアルのセクション4.14「前提条件の自動生成」と「高度な自動依存関係」を読んでいます。
メイクマニュアルのセクションは理解できたと思いますが、リンクしたWebページで頭を抱えることができないことが1つあります。
あなたがそれについて考えるならば、この再呼び出しは本当に不必要です。ターゲットのいくつかの前提条件が変更されたことがわかっているので、このビルドで更新された前提条件リストは実際には必要ありません。ターゲットを再構築することはすでにわかっています。最新のリストがあっても、その決定に影響はありません。
したがって、実行する代わりに:
%.P : %.c
$(MAKEDEPEND)
@sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' < $*.d > $@; \
rm -f $*.d; [ -s $@ ] || rm -f $@
include $(SRCS:.c=.P)
彼らはします:
%.o : %.c
@$(MAKEDEPEND)
$(COMPILE.c) -o $@ $<
-include $(SRCS:.c=.P)
しかし、ターゲットの前提条件が変更されたことがわかっている場合は、そのターゲットの依存関係リストを更新する必要はありませんか?そして、それはmakeの最初の呼び出しで行われたこととまったく同じではありませんか?私の理解では、include-statementに含まれるファイルは次のようになります。
list.o list.P : list.cc list.h debug.h
私はここに来ていないのですか?