Variable
변수 정의는 보통 '변수명:=값' 형태를 사용하여 정의하고
${변수명} 형태로 정의된 변수를 사용한다.
변수 이름은 ':' , '#' , '=' 을 포함하면 안되며 보통 대문자 및 숫자 그리고 밑줄등으로 표기한다.
변수에 특수문자를 사용하는 경우, 이후 특수 문자가 다른 기능으로 대체될 수 있기 때문에 피해야 한다.
Automatic Variables
makefile 의 Recipe 에서만 사용할 수 있는 Automatic Variable 에는 아래와 같은 것이 있다.
변수대입
변수 대입 구문은 경우에 따라 아래의 3 가지를 사용할 수 있다.
=
`=' 를 사용하여 변수를 정의한 경우를 말한다.
foo = $(bar)
bar = $(ugh)
ugh = Huh?
all:;echo $(foo)
$(foo) -> ${bar} -> ${ugh} -> Huh? 로 확장된다.
:=
`:=' 를 사용해서 정의한 변수에 해당한다.
단 한번만 스캔되기 때문에 무한루프가 발생하지 않는다.
cur-dir := /test
${subdirs}:
${MAKE} cur-dir=${cur-dir}/$@ -C $@ all
?=
변수들에 대한 다른 할당 연산자 `?='가 있다.
이것은 조건 변수 할당 연산자 라고 불린다.
이것은 그 변수가 아직 정의되지 않았을 경우에만 효력을 가지며 아래 문장은
FOO ?= bar
다음과 정확하게 동일하다
ifeq ($(origin FOO), undefined)
FOO = bar
endif
+=
이미 정의된 변수에 값에 텍스트를 추가할 수 있다.
이는 '+=' 연산자를 사용할수 있는데
이전 변수가 ':=' 를 사용했다면 이에 아래와 같이 변경된다.
variable := value
variable += more
는 완전히 다음과 동일하다:
variable := value
variable := $(variable) more
대입참조
대입참조는 `${var:a=b}' 형식으로 사용하며 이것의 의미는 '${var}' 를 먼저 읽은 다음
읽은 값의 문자열 'a' 가 발견되면 'b' 로 바꾼 다음이 값을 리턴하는 것이다.
foo := a.o b.o c.o
bar := $(foo:.o=.c)
이것은 아래와 같이 해석될 것이다.
foo := a.o b.o c.o
bar := a.c b.c c.c
Test
Variable 정의
Automatic Variables
'Build > Make' 카테고리의 다른 글
08. VPATH, vpath (0) | 2020.01.22 |
---|---|
07. Wildcard (0) | 2020.01.22 |
05. Rule 의 구성 (0) | 2020.01.22 |
04. Makefile 의 구성 (0) | 2020.01.22 |
03. make 유틸리티 사용 (0) | 2020.01.22 |