2016-07-14 2 views
0

나는 문제가 사라질 메이크왜 컴파일 할 파일을 두 번

jumbo: objs/jumbo.o objs/utils.o 

objs/%.o: %.C 
    $(CXX) $(CFLAGS) $(CPPFLAGS) -c -o [email protected] $< 

에게 컴파일

g++  jumbo.C objs/jumbo.o objs/utils.o -o jumbo 
objs/jumbo.o:jumbo.C:(.text+0x0): multiple definition of `main' 
/tmp/ccwEFt9o.o:jumbo.C:(.text+0x0): first defined here 
collect2: error: ld returned 1 exit status 
make: *** [<builtin>: server] Error 1 

의 결과가 객체 파일은 objs 디렉토리에 저장되지 않습니다.

그리고 점보 컴파일을 다시 컴파일하는지 여부는 알 수 없습니다.

답변

0

jumbo 대상을 만들기위한 레서피를 정의하지 않았습니다. 그 때문에, make는 내장 규칙을 찾고 파일 X.C에서 파일 X을 빌드하는 방법을 알고있는 규칙이 있습니다. 디렉토리와 로우를 살펴보고, 존재하는 경우 X.C (jumbo.C)이 있으므로 make는 해당 기본 제공 규칙을 사용하도록 선택합니다. 내장 된 규칙은 그래서

%: %.C 
     $(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 

, jumboobjs/jumbo.objs/utils.o 디렉토리에 따라 플러스 기본 묵시적 규칙에서 jumbo.C, 당신은 명령 줄에서 세 가지를 모두 얻을 수 있기 때문이다.

은이 단지 jumbo를 만들기위한 자신 만의 요리법을 정의 수정하려면 :

jumbo: objs/jumbo.o objs/utils.o 
     $(LINK.C) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 
관련 문제