내부 매크로

MySprtlty·2022년 7월 11일
1

make utility

목록 보기
6/12
post-thumbnail

🏷️내부 매크로

📌개념

  • make 내부적으로 미리 정의되어 있는 매크로가 존재한다.

  • make -p명령으로 확인 할 수 있다.

    • -p stands for print database
  • 몇가지 알아둬야 할 내부 매크로가 있는데, 다음과 같다.

    매크로설명default 값
    AS어셈블러as
    CCC 컴파일러cc
    CFLAGSC 컴파일러 플래그

📌자동 매크로

  • 내부적으로 정의되어 있지만, make -p명령어로 확인 할 수 없는 매크로가 존재한다.

  • 이를 자동 매크로라고 한다.

  • 자동 매크로를 사용하면, Makefile을 더 쉽고 간결하게 작성할 수 있어서 반드시 알아둘 필요가 있다.

  • 다음은 자동 매크로 리스트다.

    매크로설명
    $?(확장자 규칙에서 사용 불가) 현재 타겟보다 최근에 변경된 종속 항목 리스트
    $^(확장자 규칙에서 사용 불가) 현재 타겟의 종속 항목 리스트
    $@현재 타겟명
    $%현재의 타깃이 라이브러리 일때, 오브젝트 파일에 대응되는 이름
    $<(확장자 규칙에서만 사용 가능) 현재 타겟보다 최근에 변경된 종속 항목 리스트
    $*(확장자 규칙에서만 사용 가능) 현재 타겟보다 최근에 변경된 현재 종속 항목의 이름
  • $<$*는 확장자 규칙용으로 나중에 설명한다.


$^$@

  • $^$@는 꽤 중요하다.
calc : add.o sub.o main.o
	gcc -W -Wall -o calc add.o sub.o main.o
  • 다음과 코드는 위와 완전히 동일하다.
calc : add.o sub.o main.o
	gcc -W -Wall -o $@ $^
  • @는 과녁같이 생겼기 때문에, 타겟으로 외우면 편하다.

$(@F), $(@D), $(<F), $(<D)

  • 다음과 같이 Makefile이 기술되어 있을 때,
/temp/target.o : /usr/local/test.c
  • 명령절 부분에서 $(@F)를 사용하면, target.o로 치환된다.
  • 명령절 부분에서 $(@D)를 사용하면, /temp로 치환된다.
  • 명령절 부분에서 $(<F)를 사용하면, test.c로 치환된다.
  • 명령절 부분에서 $(<D)를 사용하면, /usr/local로 치환된다.
  • 🖇️cf) F stands for File.
  • 🖇️cf) D stands for Directory.

0개의 댓글