gnu make 公式ドキュメントによると:
<ブロック引用>レシピ内の変数と関数の参照は、メイクファイル内の他の場所の参照と同じ構文と意味を持ちます。また、同じ引用規則があります。レシピにドル記号を表示する場合は、ドル記号を 2 倍にする必要があります (「$$」)。ドル記号を使用して変数を導入するデフォルト シェルのようなシェルの場合、参照する変数が make 変数 (1 つのドル記号を使用) であるか、シェル変数 (2 つのドル記号を使用) であるかを明確にしておくことが重要です。 /P>
要するに:
- makefile 変数 => ドル記号を 1 つ使用
- シェル変数 => 2 つのドル記号を使用
$$ は現在のプロセスの PID です。
$ ps -ef|grep $$
user 208465 200620 0 10:30 pts/4 00:00:00 bash
$ for number in 1 2 3 4 ; do \
echo $$number ; \
done
208465number
208465number
208465number
208465number
この例には直接適用できません -- 示されたコードが $(shell ...)
経由で実行される場合を除きます ルールではなく:
2 次拡張が有効になっていると、make は 2 番目の処理フェーズでダブルドル自体を解釈する可能性があります。 (第 1 フェーズ:ファイルの読み取り、変数の設定。第 2 フェーズ:依存ターゲットの検索と呼び出し、ルールの実行)
これは、ターゲット名を持つ変数がファイルの後半でしか使用できない場合に、依存ターゲットを動的に指定できるようにするために使用されます。
https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html を参照してください。