[makefile] # 7. Other Features

문연수·2022년 9월 16일
0

Makefile

목록 보기
8/8

1. Include Makefiles

include 지시자는 make 에게 하나 혹은 그 이상의 또 다른 makefile 을 읽어들이라고 말한다:

include filenames...

 이는 -M 과 같은 컴파일러 플래그를 사용하여 소스에 기반한 makefile 을 생성하는 경우에 특히 유용하다. 만일 일부 C 파일들이 헤더파일을 포함할 때, 그러한 헤더는 gcc 에 의해 작성되어진 Makefile 에 포함되어질 것이다.

2. 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.hprerequisite 으로 가지지만 blah.h 는 현재 작업 디렉토리가 아닌 ../headers/blah.h 에 생성된다. some_binary 의 생성을 위해 blah.h 를 현재 작업 디렉토리에서 검색하지만 존재하지 않기 때문이 그 다음으로 vpath 를 읽어들인다. vpath%.h../headers../other-directory 에 존재한다는 것을 명시했기 때문에 이를 통해 blah.h 를 읽어올 수 있게 되는 것이다.

3. Multiline

 역슬래쉬(backslah, '\') 문자는 command 가 너무 길게 늘어질 때 이를 다중 행(multiple lines) 으로 만드는 기능을 제공한다.

some_file:
	echo This line is too long, so \
    it is broken up into multiple lines

4. .phony

.PHONYtarget 에 추가함으로써 makephony target 을 파일의 이름과 혼동하는 것을 방지할 수 있다. 가령 clean 을 입력하여 불필요한 빌드 부산물 파일을 제거하려 할때 작업 디렉토리에 clean 이라는 이름의 파일이 존재한다면 clean 이 이미 존재하므로 작업이 수행되지 않을 수 있다. 이러한 상황에서 .phony 는 유용하게 쓰일 수 있다.

5. .delete_on_error

 만일 command 가 0 이 아닌 종료 상태를 반환하는 경우 make 도구는 rule 의 실행을 중지할 것이다. 그리고 이는 prerequisite 로 전파된다.

DELETE_ON_ERROR 는 이러한 방식으로 실패한 ruletarget 을 제거할 것이다. 이는 이전의 PHONY 와는 다르게 모든 target 에 영향을 준다.

.DELETE_ON_ERROR:
all: one two

one:
	touch one
	false
    
two:
	touch two
	false

출처

[사이트] https://makefiletutorial.com/

profile
2000.11.30

0개의 댓글