GNU Make에 대해서 아주 간략하면서도 핵심적인 내용들을 적어놓은 문서가 있길래 모르거나, 쓸 때마다 헷갈렸던 내용들을 정리해 둔다.
확장자 규칙, 패턴 규칙
전통적인 형식
.c.o:
gcc -c ${CFLAGS} $<
GNU make 확장 기능
%.o: %.c
gcc -c -o $@ ${CFLAGS} $<
기호 정리
$< 입력 파일, 콜론의 오른쪽에 오는 패턴을 치환
$@ 출력 파일, 콜론의 왼쪽에 오는 패턴을 치환
$* 입력 파일에서 확장자(.c, .s 등)을 떼어낸 파일명
$@ 출력 파일, 콜론의 왼쪽에 오는 패턴을 치환
$* 입력 파일에서 확장자(.c, .s 등)을 떼어낸 파일명
예제
%_dbg.o: %.c
gcc -c -g -o $@ ${CFLAG} $<
DEBUG_OBJECTS = main_dbg.o edit_dbg.o
edimh_dbg: $(DEBUG_OBJECTS)
gcc -o $@ $(DEBUG_OBJECTS)
매크로 조건
예제
예제
ifdef XPM
LINK_DEF = -DXPM
endif
$make XPM=yes
주의사항
타겟 아래의 명령에 대해서는 하나의 행이 각각의 쉘에서 실행됨. 순차적이 아님. 순차적인 실행을 원할 때는 ‘;’ 와 ‘\’ 를 이용.
예제
target:
cd obj ; \
HOST_DIR=/hom/e ; \
mv *.o $$HOST_DIR