본문 바로가기

Build/Make

06. Variable

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