に私は「shell
」機能を作成し、「$$
」との間の差によって困惑しています。ドキュメントでは私が見つける:
シェル関数は(すべての引数のように)拡大し、実行するためにサブシェルに渡される単一の引数を受け入れます。コマンドの標準出力が読み込まれ、関数の値として返されます。
私は、これは同様にやっていた正確何 "$$" だと信じていたが、この小さな例では:
a = $(shell find . -maxdepth 1 -type f -name "Makefile")
b = $$(find . -maxdepth 1 -type f -name "Makefile")
.PHONY: all A B
all: A B
A: $(a)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
B: $(b)
@echo "Target: $(@)"
@echo "Prereq: $(<)"
@echo "Var a: $(a)"
@echo "Var b: $(b)"
出力は次のようになります。
Target: A
Prereq: Makefile
Var a: ./Makefile
Var b: ./Makefile
make: *** No rule to make target '$(find)', needed by 'B'. Stop.
注意ここでは、引数がまだ展開されていないかのように、「のターゲットを作成するルールはありません。 '(Find)'」となっています。 (変数を単純に展開するようにも試みましたが、 "b:=$$(...)
"が、これは何も変わりませんでした)。
は、私は誰かが私には微妙な違いのように思えるよりこれについて詳しく説明するための知識を、持っていますが、おそらく私は、この時点で理解することができるよりもはるかに深遠であることを願っています。
徹底的な回答をいただきありがとうございます。この例は優れています。私はmakeがどのように変数を拡張するかは、いつも私にとってやや魔法的であると認めなければなりません。 –