2017-11-17 6 views
0

저는 Makefile을 매우 새로 도입했습니다. 다음 메이크 파일을 만들었습니다. (작동하지 않습니다.) genntated 오브젝트 코드를 differnt 폴더에 넣지 않을 것입니다 (폴더는 현재 디렉토리에 있습니다).다른 폴더에 개체 코드를 넣을 메이크 파일을 만드는 방법

$ ls 
main.cpp Makefile object_code Time.cpp Time_.h 

어떻게하면됩니까 ??

VER = Debug 
CC = g++ 


OBJECTFIELS = ./object_code/main.o ./object_code/Time.o 

../$(VER)/main: $(OBJECTFIELS) 
    $(CC) $(OBJECTFIELS) -o [email protected] 

$(OBJECTFIELS): Time_.h 

./object_code/main.o: main.cpp 

./object_code/Time.o: Time.cpp 

clean: 
    rm $(OBJECTFIELS) main 

이것은 오류입니다.

$ make 
g++ ./object_code/main.o ./object_code/Time.o -o ../Debug/main 
g++: error: ./object_code/main.o: No such file or directory 
g++: error: ./object_code/Time.o: No such file or directory 
g++: fatal error: no input files 
compilation terminated. 
Makefile:8: recipe for target '../Debug/main' failed 
make: *** [../Debug/main] Error 1 

이것이 마지막 질문입니다.

답변

0

여기에 게시 한 메이크 파일을 어떻게 출력하는지 알 수 없습니다.

오류가 인쇄되지 않고 링크가 성공한 경우 개체 파일이 이미 존재합니다.

또는 오브젝트 파일이 존재하지 않는 경우 make는 파일 작성 방법을 모르기 때문에 불만을 표시합니다. 사용중인 메이크 파일과 여기에 게시 한 메이크 파일간에 약간의 차이가 있어야합니다.

어떤 경우에도 make는 foo 문자열의 파일 foo.cpp에서 파일 foo.o을 작성하는 방법을 알고 있습니다. 어떻게하는지 알려주는 내장 규칙이 있습니다.

그러나 make는 foo에 관계없이 foo.cpp 파일에서 ./object_code/foo.o 파일을 빌드하는 방법을 알지 못합니다. 일부 디렉토리에 오브젝트 파일을 빌드하는 방법을 알려주는 기본 제공 규칙은 없습니다. 그렇게하기를 원한다면, 어떻게 말해야 할 것입니다. 여기 컴파일러 변수로 CXX을 사용하고 있습니다 (

./object_code/main.o: main.cpp 

./object_code/Time.o: Time.cpp 

object_code 디렉토리에 오브젝트 파일을 작성하는 방법을 설명하는 pattern rule으로 대체 : 당신은 선을 제거해야합니다 규칙 CC으로하면 C 컴파일러와 CXX입니다 C++ 컴파일러입니다. 다음과 같은 좋은 이유가없는 한 항상 규약을 고수해야합니다.) :

VER = Debug 
CXX = g++ 

OBJECTFIELS = ./object_code/main.o ./object_code/Time.o 

../$(VER)/main: $(OBJECTFIELS) 
     $(CXX) $(OBJECTFIELS) -o [email protected] 

$(OBJECTFIELS): Time_.h 

./object_code/%.o : %.cpp 
     $(CXX) -c -o [email protected] $< 

clean: 
     rm $(OBJECTFIELS) main