Makefile 자주 사용하는 문법 정리

Makefile 을 작성할 때 자주 사용하는 자동 변수들과 문법을 정리해보았다.

1. 자주 사용하는 자동변수

  • $@ : 목표 이름

  • $* : 목표 이름에서 확장자가 없는 이름

  • $< : 첫 번째 전제 조건의 파일 이름

  • $? : 목표 파일 보다 더 최근에 갱신된 파일 이름

  • $^: 현재 Target이 의존하는 대상들의 전체 목록

  • $?: 현재 Target이 의존하는 대상들 중 변경된 것들의 목록

  • $% : 대상의 이름 (해당 규칙 대상이 아카이브 인 경우)

For example, if the target is foo.a(bar.o) then $% is bar.o and $@ is foo.a. $% is empty when the target is not an archive member.

Archive files 이란? Archive files are files containing named sub-files called members; they are maintained with the program ar and their main use is as subroutine libraries for linking. 즉, 파일을 묶어서 하나로 만든 것.

사용 가능한 자동 변수들의 전체 목록과 설명은 이 사이트에서 확인할 수 있다.

2. 자주 사용하는 문법

  • $(addsuffix 접미사, 문자열)

          $(addsufix  .c, memo  main) => memo.c   main.c
  • $(addprefix 접두어, 문자열)

          $(addprefix src/, memo main) => src/memo   src/main
  • $(shell <shell-command>)

          SH = $(shell ls *.c)  => shell 명령에 대한 결과가 변수에 들어감
  • $(subst 찾을 문자, 변경할 문자, 대상 문자)

    "대상문자"에서 "찾을 문자"를 "변경할 문자"로 변경해 준다.

  • $(patsubst 찾을 패턴, 변경할 패턴, 대상 문자)

    subst와 기능은 동일하나 확장자를 바꿀때 사용함

  • $(strip 대상문자)

    대상문자에서 모든 공백을 1칸으로 줄인다. 여백이 많아도 모두 1칸으로

  • $(filter 찾을 문자, 대상문자)

    대상문자에서 찾을 문자를 포함한 문자들을 찾아서 저장한다.

  • $(filter-out 찾을 문자, 대상문자)

    filter와 반대로 찾을 문자가 있는 경우를 제외하고 저장한다.

  • $(join 원본문자, 붙일문자)

    원본문자와 붙일문자를 붙여서 한 문자로 만든다.

  • $(dir 대상문자)

    대상문자에서 파일문자를 제외한 경로명만 추출한다.

  • $(notdir 대상문자)

    대상문자에서 파일명만 추출한다.

  • $(baseanme 대상문자)

    대상문자에서 확장자를 제외한 문자를 알려준다.

Last updated