私は何年も単純なメイクファイルを使用してきましたが、雇用主が購入したコードベースに使用される、Autotools によって生成されたメイクファイルの大規模で複雑なセットの詳細を学習するタスクが割り当てられたのはつい最近のことです。これらでは、次のような変数宣言に遭遇しています。
QOBJECT_MOCSRCS = $(QOBJECT_HEADER:%.h=.gen/moc_%.cpp) \
$(QOBJECT_SRCS:%.cpp=.gen/moc_%.cpp)
QOBJECT_DEPS = $(QOBJECT_MOCSRCS:%.cpp=.deps/%.Po)
コンテキストからの私の推測では、ビルド プロセスによって提供されるファイルの名前のこれらのセットアップ リスト、たとえば、QOBJECT_MOCSRCS は、(a) .h ファイル、(b) .cpp ファイルのリストとして終了する必要があります。ビルド中に一時ディレクトリ ./gen に生成される一連の中間 .cpp ファイルの % 語幹名。これは、Qt の moc ツールを使用した Qt ファイルのビルドの結果として出力される moc_%.cpp ファイルを保存するために使用されます...私を夢中にさせているのは、どのメイクでも何も見つけることができなかったことです。私が持っているドキュメンテーション (主に GNU make マニュアル) は、このスタイルの宣言が何と呼ばれているかを教えてくれるので、それを追跡して構文を把握することができます。$() の内容は一種のルールのように見え、GNU make マニュアルの最も近い同等のものは、ターゲット固有の変数値を指定するルールのようですが、これが正しい読み方に近いかどうかはわかりません。誰かが勉強のための適切な参考文献を教えてくれますか?