2011-09-13 2 views
40

다음과 같은 makefile이 있습니다.백분율 기호는 메이크 파일에서 무엇을합니까?

include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) 

%-test: 
     Something here 

대상 규칙 줄에서 의도 한 내용을 이해합니다. 첫 번째 줄에서 % 기호는 무엇입니까? 대상 규칙 줄에 퍼센트 기호를 표시 할 수 있습니까?

make sometarget를 쓸 때 어떤 규칙의 일부로 (이 makefile의 첫 번째 줄과 같이) 작성되지 않은 makefile의 줄이 전혀 실행되지 않습니까? 그렇다면 실행 명령은 무엇입니까?

답변

33

the GNU make manual에서 읽을 수 있듯이 퍼센트는 와일드 카드의 역할을합니다. patsubstfunction의 첫 번째 인수는 패턴을 형성합니다. 마지막 인수의 각 항목/단어는이 패턴과 비교되고 일치하면 두 번째 인수로 바뀝니다. 패턴에 와일드 카드 기호 (%)가 있으면, 이는 임의의 문자 수와 일치하며,이 문자는 두 번째 인수에서 % 대신에 대체 문자열로 복사됩니다.

예제에서 패턴은 와일드 카드 기호이므로 함수에 대한 마지막 인수의 단어와 일치하게되며이 단어는 %의 자리에 대체 문자열 (두 번째 인수)에 복사됩니다. .

예를 들어 더 명확하게 알 수 있습니다. TEST_SUBDIRS에는 두 개의 이름이 있다고 가정 해 보겠습니다.

TEST_SUBDIRS := test1 test2 
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) 

이것은 다음과 같습니다.

include $(src)/test1/Make.tests $(src)/test2/Make.tests 

메이크 파일은 한 줄씩 순차적으로 처리됩니다. 변수 할당은 "내부화"되어 있으며 include 문을 사용하면 다른 파일의 내용이 그 위치에 문자 그대로 삽입되어 해당 내용이 makefile의 일부로 처리됩니다.
종속성 그래프는 규칙을 읽을 때 규칙에서 형성되며 전체 파일이 처리 된 후 필요한 레시피가 실행되어 요청한 대상을 업데이트합니다.

관련 문제