매크로 개념과 작성 규칙

MySprtlty·2022년 7월 11일
1

make utility

목록 보기
4/12
post-thumbnail

🏷️매크로

📌개념

  • Makefile내에서 매크로를 정의하여 사용 할 수 있다.
  • 매크로를 사용하면 이식성을 높여준다.

🏷️매크로 작성 규칙

  • 매크로를 작성할 때, 지켜야 할 규칙이 몇가지 있다.

📌1. 매크로 정의는 =를 포함하는 하나의 문장이다.

  • 다음과 같이 정의한다.
TEST = Hello World
  • 매크로명은 관습적으로 C언어처럼 대문자를 사용한다.
  • " "(큰따옴표)로 문자열을 감싸줘선 안된다.

📌2. #은 주석 기호다.

TEST = Hello World # comments

📌3. 여러 행을 사용해서 정의할 때는 \를 사용한다.

  • 아래 코드는 위 문장과 동일하다.
TEST = Hello\
		World

📌4. 매크로를 참조할 때는 ( )(소괄호)를 사용한다.

TEST = Hello World

$(TEST)
$(TEST)!
  • { }(중괄호)를 사용해도 되지만, 셸 환경 변수와 구분을 위해서 ( )를 사용하는 것이 좋다.

📌5. 정의되지 않은 매크로를 참조하면, NULL문자열로 치환된다.

$(TEST)!
  • TEST가 정의되지 않아, NULL문자열로 치환되기에 최종적으로 !가 된다.

📌6. 중복된 정의는 마지막에 정의된 값을 사용한다.

TEST = Hello World
TEST = Bye World
$(TEST)
  • $(TEST)Bye World로 치환된다.

📌7. 매크로 정의 시, 이전에 정의된 매크로를 참조해서 정의할 수 있다.

TEST = Hello World
TEST2 = Second ${TEST}
  • 매크로TEST2Second Hello World로 정의된다.

📌8. 여려 대입 기법이 존재한다.

TEST = Hello World
TEST2 := Hello World
TEST3 += Hello World
TEST4 ?= Hello World

=:=

  • =는 재귀적 확장 매크로 라고 하고 :=는 단순 확장 매크로라고 한다.
  • =는 매크로 정의 위치와 상관없이, 타 매크로를 참조해서 정의할 수 있다.
  • :=는 매크로 정의 순서에 종속적이어서, 아래에 선언된 매크로를 위에서 참조하여 정의할 수 없다.
  • 실습을 진행해보면 바로 알 수 있다.
A = Ice $(B)
B = Candy

C := Pine $(D)
D = Apple

all : 
        echo $(A) 
        echo $(B)
        echo $(C)
        echo $(D)

.SILENT:
  • 출력 결과는 다음과 같다.
Ice Candy
Candy
Pine
Apple
  • 🖇️cf. .SILENT는 실행되는 명령을 화면에 출력하지 않게 해주는 특수 타겟으로, 나중에 설명한다.

+=

  • 문자열 Append 연산을 한다.
TEST = Hello
TEST += World

all :
        echo $(TEST)

.SILENT:
  • Hello World가 출력된다.

?=

  • 현재 정의하는 매크로가 정의되어 있지 않을 때, 정의한다.
TEST ?= Bye World

TEST2 = Hello World
TEST2 ?= Bye World

all :
        echo $(TEST)
        echo $(TEST2)

.SILENT:
  • TEST는 정의되어 있지 않기 때문에, TEST ?= Bye World에서 Bye World로 정의된다.
  • 반면 TEST2는 이미 Hello World 문자열로 정의되어 있었기 때문에, TEST2 ?= Bye World는 무시된다.
  • 따라서 결과는 다음과 같다.
Bye World
Hello World

0개의 댓글