回答:
違いはありません–それらはまったく同じ意味です(GNU MakeとPOSIX makeで)。
私は考えて$(round brackets)
見て整然とし、それは単なる個人的な好みです。
(他の回答は、GNU Makeのドキュメントの関連セクションを示しており、単一の式内で構文を混在させるべきではないことに注意してください)
deploy: ${DEPS}
は構文エラーとして強調表示されましたがdeploy: $(DEPS)
、両方のスペルがで呼び出されmake
たときに同じ効果があるにもかかわらず、正しく表示されました。
すでに正しく指摘されているように、違いはありませんが、2つの種類の区切り文字を混在させないように注意してください。unomadhGNU makeの例のように、不可解なエラーが発生する可能性があります。
関数呼び出し構文に関するGNU makeマニュアルから(私の強調):
[…]引数自体に他の関数呼び出しまたは変数参照が含まれている場合、すべての参照に同じ種類の区切り文字を使用するのが最も賢明です。書き
$(subst a,b,$(x))
ません$(subst a,b,${x})
。これはより明確であり、参照の終わりを見つけるために1種類の区切り文字のみが一致するためです。
実際には、かなり異なっているようです:
, = ,
list = a,b,c
$(info $(subst $(,),-,$(list))_EOL)
$(info $(subst ${,},-,$(list))_EOL)
出力
a-b-c_EOL
md/init-profile.md:4: *** unterminated variable reference. Stop.
しかし、これまでのところ、$ {...}への変数名自体にコンマが含まれている場合にのみ、この違いが見つかりました。私は最初に$ {...}が値の一部ではなくコンマを拡張していると思っていましたが、この方法でハックできないことがわかりました。私はまだこれを理解していません...誰かが説明があったら、私は知っていて嬉しいです!
$ {}スタイルを使用すると、対応する環境変数が設定されていれば、シェルでmakeルールをテストできます。これは、bashと互換性があるためです。
式に不等括弧が含まれていると、違いが生じます。
${info ${subst ),(,:-)}}
$(info $(subst ),(,:-)))
->
:-(
*** insufficient number of arguments (1) to function 'subst'. Stop.
変数参照の場合、これは関数、またはブラケットを含む変数名に違いをもたらします(悪い考え)
$()
in make を使用して、make変数とシェル変数の間で(すでに存在している以上の)混乱を引き起こさないようにしています。変数参照に関するGNU Makeドキュメント。