정의:
name = text string
FILE = TEXT.${ABC} # 매크로 안의 매크로
DEBUG = # null 문자할당
- 따옴표도 문자열의 일부로 취급된다
- 매크로를 정의하는 순서에 상관없이 동일한 결과
- 같은 매크로를 여러 번 정의할 경우 마지막 정의만을 참조
사용:
$(name)
${name} # 중괄호 권장
내부적으로 정의된 매크로:
make -p 로 확인가능
명령행에서 매크로 정의:
$ make jgref DIR=/usr/proj
$ DIR=/usr/proj make jgref # Bourne shell, Korn shell 계열
# 두 경우에 매크로의 우선 순위가 다르다
매크로 할당 우선순위:
일반적인 경우:
- make 명령 입력시 make 명령 다음에 입력한 매크로
- 기술 파일의 매크로 정의
- 현재 쉘 환경 변수. 사용자가 make 명령 앞에 입력한 매크로
- make 의 기본 정의
-e 옵션을 주었을 때:
- make 명령 입력시 make 명령 다음에 입력한 매크로
- 현재 쉘 환경 변수. 사용자가 make 명령 앞에 입력한 매크로
- 기술 파일의 매크로 정의
- make 의 기본 정의
매크로 치환:
SRC = defs.c redraw.c calc.c
ls ${SRC:.c=.o} # ${매크로이름:찾을문자열=바꿀문자열}
- 줄 끝 또는 공백 문자 앞에 있는 경우만 치환된다.
- 바꿀 문자열은 null 일 수 있다.
prerequisite 또는 target 에 사용되는 내부 매크로:
$@ : 현재 target
$$@ : 현재 target. dependancy line 에서만 사용가능
CMDS = cat dd echo date cccmp
${CMDS} : $$@.c # make cat 하면 cat.c 가, make ehco 하면 echo.c 가 적용된다
${CC} -O $? -o $@
$? : 현재 타깃보다 최신인 필요 항목들의 명단
컴퓨터분류