2009-05-29 5 views
10

누구나 Makefile$<[email protected]의 의미를 설명 할 수 있습니까?

+2

훌륭한 매뉴얼을 읽는 좋은 전통이 된 이유는 무엇입니까? – Jens

+1

몇 가지 간단한 질문으로 200 페이지의 긴 문서를 읽는 사람은 누구입니까? – MarcusJ

+1

GNU Make가 어렵지 않았다면이 문서를 200 페이지 분량의 긴 문서에서 찾아 보는 것은 쉽습니다. 내 시스템에는 이것에 대해 설명하지 않는 * man * 페이지 (* man * 매뉴얼 *)가 있지만 GNU Make Manual *을 어떻게 찾을 지 알려주지 않고 참조한다. 그래서 기본적으로 Google이 대답이며, Google에'$ @ '을 제공하면 실제로 답을 얻을 수 있습니다 (놀랍게도). – reinierpost

답변

20

$<은 make 규칙의 첫 번째 "전제 조건"으로 평가되며 [email protected]은 make 규칙의 "대상"으로 평가됩니다.

여기의 예이다 :이 경우

file.o : file.c 
     $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected] 

, $<file.c 대체되며 [email protected]file.o 될 것이다.

이이 같은 일반적인 규칙에서 더 유용합니다

%.o : %.c 
     $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o [email protected] 

더 많은 정보를 원하시면 this manual를 참조하십시오.

+2

위의 두 예제는 GNU Make에서 작동하지만, 이식 가능하지는 않습니다. POSIX는 % 규칙을 정의하지 않으며 접미사 규칙 (즉, Laurence Gonslaves가 답변에서 보여준대로)에 대해서만 <를 정의합니다. 이 변수의 표준 정의는 여기에서 더 잘 읽 힙니다. http://www.opengroup.org/onlinepubs/009695399/utilities/make.html – adl

+2

반면에 Makefile 작성은 자신을 제한하면 훨씬 쉽게됩니다. GNU make. (어느 정도의 모든 기존 플랫폼에 이식 가능합니다.) – JesperE

+0

(누군가가 GNU make가 어떤 플랫폼에서 사용 가능한지를 알려주기를 기다리고 있습니다 ...) – JesperE

6

[email protected]은 현재 규칙의 대상입니다. $<은 현재 규칙의 첫 번째 전제 조건 ("원본")의 이름입니다. 그래서 예를 들면

: 또한 GNU make manual § 10.5.3, "Automatic Variables"

gcc -c -Wall -o foo.o foo.c 

참조 :

.c.o: 
     $(CC) -c $(CFLAGS) -o [email protected] $< 

이 같은 명령 무언가로 확장됩니다.

+0

하나의 타겟에 대해 여러 개의 소스 파일이 있다면 어떻게 될까요? – MarcusJ

+1

@MarcusJ 답에서 언급했듯이'$ <'는 * 첫 번째 * 전제 조건의 이름입니다. 첫 번째 전제 조건 이상을 제공하는 다른 자동 변수 ('$?','$ ^','$ +','$ |')에 대한 링크를 따라갈 수 있습니다. –