답변:
차이는 없습니다. 정확히 같은 의미입니다 (GNU Make와 POSIX make에서).
더 $(round brackets)
깔끔해 보이지만 개인적인 취향 일뿐입니다.
(다른 답변은 GNU Make 문서의 관련 섹션을 가리키며 단일 표현식 내에서 구문을 혼합해서는 안된다는 점에 유의하십시오)
deploy: ${DEPS}
는 나에게 구문 오류로 강조 되었지만에서 deploy: $(DEPS)
호출 될 때 두 철자가 동일한 효과를 나타내더라도 올바른 것으로 표시 되었습니다 make
.
변수 참조의 기본 섹션 로부터 GNU make
문서 상태 차이가 없음 :
변수의 값을 대체하려면 괄호 나 중괄호 변수의 이름 다음에 달러 기호를 쓰기 : 하나
$(foo)
또는${foo}
유효한 참조이다 변수 foo를합니다.
이미 올바르게 지적한 바와 같이, 아무런 차이가 없다 하지만 이 같은 비밀 오류가 발생할 수 구분 기호의 두 종류를 혼합하지 않도록주의해야 할 unomadh GNU 메이크 예.
에서 함수 호출 구문에 GNU 메이크 설명서 (강조 광산) :
[…] 인수 자체에 다른 함수 호출이나 변수 참조가 포함되어 있으면 모든 참조에 대해 동일한 종류의 구분 기호를 사용하는 것이 가장 좋습니다. 쓰지
$(subst a,b,$(x))
말고$(subst a,b,${x})
. 이는 더 명확 하고 참조의 끝을 찾기 위해 한 가지 유형의 구분 기호 만 일치하기 때문 입니다.
실제로는 상당히 다른 것 같습니다.
, = ,
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와 shell 변수 사이에 혼동을 일으키지 않기 위해 in make를 사용합니다 . GNU 변수 참조에 대한 문서를 만듭니다 .