2017-11-16 1 views
0

Makefile을 처음 사용합니다 (실제로 프로그래밍하는 것). 나는 메이크 파일을 다음했다 : -Makefile은 .o 파일이 다른 파일러에있을 때 파일이 변경되지 않아도 모든 파일을 컴파일합니다.

$ cat Makefile 
VER = Debug 

main: main.o Time.o 
    g++ Object\ Code/main.o Object\ Code/Time.o -o ../$(VER)/main 

main.o: main.cpp 
    g++ -c main.cpp -o Object\ Code/main.o 

Time.o: Time.cpp Time_.h 
    g++ -c Time.cpp -o Object\ Code/Time.o 

clean: 
    rm Object\ Code/*.o 
    rm ../$(VER)/main 

메이크 src 폴더에

$ ls && pwd 
main.cpp Makefile Object Code Time.cpp Time_.h 
/home/Rahul/Devlopment/WorkSpace/Test C++/src 

개체 코드가 SRC의 디렉토리입니다.

$ ls .. 
Debug Release src 

하지만 난 그냥 하나의 파일을 변경하게 사용하려고 whenver는 모든 파일을 컴파일 : -

$ make 
g++ -c main.cpp -o Object\ Code/main.o 
g++ -c Time.cpp -o Object\ Code/Time.o 
g++ Object\ Code/main.o Object\ Code/Time.o -o ../Debug/main 
$ touch Time 
Time.cpp  Time_.h 
$ touch Time_.h 
$ make 
g++ -c main.cpp -o Object\ Code/main.o 
g++ -c Time.cpp -o Object\ Code/Time.o 
g++ Object\ Code/main.o Object\ Code/Time.o -o ../Debug/main 
$ make 
g++ -c main.cpp -o Object\ Code/main.o 
g++ -c Time.cpp -o Object\ Code/Time.o 
g++ Object\ Code/main.o Object\ Code/Time.o -o ../Debug/main 

는 완전한 멍청한 놈으로 나는 아무 생각이 없습니다. 도와주세요.

+2

'main'은'main.o'에 의존하지 않습니다. Object Code/main.o' 등 – Matt

+0

@Neil Butterworth가 말한 것 : 전염병과 같은 파일 이름에 공백을 두지 마십시오. – Vroomfondel

답변

3

파일 main.oObject\ Code/main.o과 같은 파일이 아니며 다른 파일과 유사합니다. 프로그램을 개발할 때 파일 이름과 디렉토리에 공백이 생기지 않도록 적극 권장합니다. 별도의 디렉토리를 사용하도록 make를 설정하는 것은 간단하지 않으며 여러 디렉토리를 구현하기 전에 makefile을 단일 디렉토리에서 작동시켜야합니다.

1

타겟 메이크를 만들 때 레시피가 타겟과 동일한 파일을 작성해야합니다. 그렇지 않으면 거짓말을하십시오. 이 같은 규칙 :

main.o: main.cpp 
     <recipe> 

는 당신이 파일 main.o을 구축하려는 경우 "라고 말할 수 있도록 해석하고 main.cppmain.o가 최신 인 파일이있다, 당신은 할이 조리법 <recipe>를 실행할 수 있습니다 그". 하지만 요리법이 main.o이 아니며, Object code/main.o을 만듭니다. 그래서 다음에 make가 진행될 때 main.o을 만들고 싶지 않으므로 make는 다시 빌드하려고 시도합니다.

항목 # 1 : makefile에 공백이 포함 된 경로를 사용할 수 없습니다 .

항목 2 : 규칙이 예상 한 것과 동일한 것을 빌드하려면 항상 [email protected] 등의 자동 변수를 사용해야합니다.

항목 # 3 :

: 그 다음, 하드 코드 디렉토리 오브젝트 파일에 소스 코드를 컴파일

다음과 비슷한 모습이 될 것입니다 귀하의 메이크 ($(Ver) 같은) 변수 디렉토리에 실행 파일을 작성하는 데 유용 아니다

CXX = g++ 
SOURCES = main.cpp Time.cpp 
VER = Debug 

$(VER)/main: $(SOURCES:%.cpp=$(VER)/%.o) 
     $(CXX) -o [email protected] $^ 

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

clean: 
     rm -rf $(VER) 

자세한 내용은 The GNU make manual을 참조하십시오.

관련 문제