2012-10-26 2 views

답변

1

해당 사항은 implicit rule입니다. 당신은 단지 오브젝트 파일을 원하는 경우에 당신은 단지 실행해야

CC=cc -g 

all: client 

client: client.c 
    $(CC) client.c -o client 

clean: 
    -rm -f client 

:

$ make client.o 

을 그리고 당신은 오브젝트 파일을 얻을 것이다의는 다음 메이크 있다고 가정 해 봅시다.

%.o: %.c 
    $(CC) -c $< 

이전 규칙 객체 (.o) 파일에 대한 .c 파일에서 구축하는 규칙이다 : 그러나, 당신은 또한 같은 명시 적 규칙을 작성할 수 있습니다. $<은 규칙이 의존하는 파일의 이름을 얻는 데 도움이됩니다. 여러 오브젝트 파일이있는 경우

, 당신은 다음 변수를 정의 할 수 있습니다 :이 경우

objects = client.o foo.o bar.o 

client: $(objects) 
    $(cc) -o [email protected] $(objects) 

$(objects): config.h 

clean: 
    -rm -f client $(objects) 

objects은 컴파일 할 오브젝트 파일과 관련된 변수입니다. 종속성 및 링크를위한 인수로 client에 사용되며 헤더 파일 (이 예에서는 config.h)에 종속 된 규칙을 정의하는 데 사용되며 finalle은 clean 규칙에서 사용되어 모든 규칙을 시작합니다 다시.

[email protected]은 규칙 이름 대신 사용됩니다. 마지막 경우에는 client이됩니다.

manual of GNU Make에는 학습 과정을 이해해야하는 많은 예제가 포함되어 있습니다.

+0

이것은 "링크 부분 만"입니다. 말할 필요도없이 작동하지 않습니다. 내가 뭘 잘못하고 있는지 알아? – usustarr

+0

오류 메시지없이 작업하고있는 Makefile 없이는 말하기 어렵습니다. – gpoo