SHELL = bash
= 는 변수가 사용될때마다 값이 요구된다. CFLAGS = $(CFLAGS) -O 이런 문법은 재귀적으로 확장되어 무한루프를 생성할 수 있기때문에 사용시 주의 해야한다.
AR ?= ar
?=의 문법은 아래와 같다
ifeq ($(origin AR), undefined)
AR = ar
endif
UNAME := $(shell uname)
:= 또는 ::= 는 변수 값을 한번만 할당하고 사용한다.
$(shell uname)
쉘 명령어를 실행한 결과를 가져온다.
.PHONY: valgrind
.PHONY: 로 정의한 target 들은 실제 파일 이름이 아닌 가상의 이름을 나타낸다. 만약에 clean, all 이라는 파일이 존재한다면 target과 혼동하여 make 가 오작동할 가능성이 있다. 이때 .PHONY 로 지정해서 실제 파일이 아님을 확인시켜줄 수 있다.
%.o : %.cpp
% 는 파일 확장자를 제외한 파일 이름 이다.
$>
입력 파일명.
$@
출력 파일명.
$*
입력 파일에서 확장자(.c, .o)를 제외한 파일명.
참고
- Make 에 대해서 알아야할 7가지
- .PHONY 를 사용하는 이유
$ info make
- 리눅스 gcc 컴파일러와 make 강좌