include
지시자는 make
에게 하나 혹은 그 이상의 또 다른 makefile
을 읽어들이라고 말한다:
include filenames...
이는 -M
과 같은 컴파일러 플래그를 사용하여 소스에 기반한 makefile
을 생성하는 경우에 특히 유용하다. 만일 일부 C 파일들이 헤더파일을 포함할 때, 그러한 헤더는 gcc
에 의해 작성되어진 Makefile
에 포함되어질 것이다.
vpath
지시자 vpath
는 일부 필요조건의 집합이 어디에 존재하는지 명시하기 위해 사용할 수 있다. 형태는 vpath <pattern> <directories, space/colon separated>
이다.
<pattern>
은 아예 없거나 혹은 그 이상의 문자와 일치되는 %
를 가질 수 있다. 또한 VPATH
변수를 통해 전역적으로 할 수 있다:
vpath %.h ../headers ../other-directory
some_binary: ../headers blah.h
touch some_binary
../headers:
mkdir ../headers
blah.h:
touch ../headers/blah.h
clean:
rm -rf ../headers
rm -f some_binary
주목해서 봐야 하는 부분은 처음 등장하는 rule
이다. 이는 blah.h
를 prerequisite
으로 가지지만 blah.h
는 현재 작업 디렉토리가 아닌 ../headers/blah.h
에 생성된다. some_binary
의 생성을 위해 blah.h
를 현재 작업 디렉토리에서 검색하지만 존재하지 않기 때문이 그 다음으로 vpath
를 읽어들인다. vpath
의 %.h
는 ../headers
와 ../other-directory
에 존재한다는 것을 명시했기 때문에 이를 통해 blah.h
를 읽어올 수 있게 되는 것이다.
역슬래쉬(backslah, '\') 문자는 command
가 너무 길게 늘어질 때 이를 다중 행(multiple lines) 으로 만드는 기능을 제공한다.
some_file:
echo This line is too long, so \
it is broken up into multiple lines
.phony
.PHONY
를 target
에 추가함으로써 make
가 phony target
을 파일의 이름과 혼동하는 것을 방지할 수 있다. 가령 clean
을 입력하여 불필요한 빌드 부산물 파일을 제거하려 할때 작업 디렉토리에 clean
이라는 이름의 파일이 존재한다면 clean
이 이미 존재하므로 작업이 수행되지 않을 수 있다. 이러한 상황에서 .phony
는 유용하게 쓰일 수 있다.
.delete_on_error
만일 command
가 0 이 아닌 종료 상태를 반환하는 경우 make
도구는 rule
의 실행을 중지할 것이다. 그리고 이는 prerequisite
로 전파된다.
DELETE_ON_ERROR
는 이러한 방식으로 실패한 rule
의 target
을 제거할 것이다. 이는 이전의 PHONY
와는 다르게 모든 target
에 영향을 준다.
.DELETE_ON_ERROR:
all: one two
one:
touch one
false
two:
touch two
false