Makefile에서 : =와 =의 차이점은 무엇입니까?


답변:


80

이것은 6.2 The Two Flavors of Variables 섹션의 GNU Make 문서에 설명되어 있습니다.

간단히 말해로 정의 된 변수 :=는 한 번 확장되지만로 정의 된 변수 =는 사용할 때마다 확장됩니다.


4
그래서 : =가 더 효율적이라고 말하는 것이 맞습니까? 아니면 효율성이 실제로 Makefile의 요소가 아닙니까?
Ungeheuer 2017-04-27

3
@Ungeheuer 프로세스 호출 ( make's main job)은 내부 변수 해결보다 훨씬 더 많은 오버 헤드를 가지고 있기 때문에 문제가되지 않습니다 .
Kirill Bulygin

68

간단한 할당 :=

단순 할당 표현식은 맨 처음에 한 번만 평가됩니다. 예를 들어, CC :=${GCC} ${FLAGS}첫 만남 중에로 평가되면 발생할 gcc -W때마다 ${CC}로 대체됩니다 gcc -W.

재귀 할당 =

재귀 할당 표현식은 코드에서 변수가 발견 될 때마다 평가됩니다. 예를 들어 like 문은 like CC = ${GCC} {FLAGS}작업 ${CC} file.c이 실행될 때만 평가됩니다 . 변수는 경우, GCC즉 재 할당되는 GCC=c++다음은 ${CC}변환됩니다 c++ -W재 할당 후.

조건부 할당 ?=

조건부 할당은 값이없는 경우에만 변수에 값을 할당합니다.

첨부 +=

그런 CC = gcc다음 추가 연산자가 CC += -w
다음 과 같이 사용 되었다고 가정하면 CC이제 값이 있습니다.gcc -W

자세한 내용은이 튜토리얼을 확인 하세요.


"간단한 할당 표현식은 처음에 한 번만 평가됩니다.": 명확하게 말하면 확장 / 평가는 변수가 처음 사용될 때가 아니라 정의 될 때 수행됩니다.
Michael Burr

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.