2011-09-13 4 views
0

여기에 쉬운 메이크 파일이 있습니다.메이크 파일에 대한 질문

나는 2 개의 질문이 있습니다.

  1. 모든 : $ (출처) $ (실행) 왜 종속성에 소스를 넣어.
  2. ".cpp.o :"

    CC=g++ 
    
    CFLAGS=-c -Wall 
    
    LDFLAGS= 
    
    SOURCES=main.cpp hello.cpp factorial.cpp 
    
    OBJECTS=$(SOURCES:.cpp=.o) 
    
    EXECUTABLE=hello 
    
    
    all: $(SOURCES) $(EXECUTABLE) 
    
    $(EXECUTABLE): $(OBJECTS) 
    
        $(CC) $(LDFLAGS) $(OBJECTS) -o [email protected] 
    
    .cpp.o: 
    
        $(CC) $(CFLAGS) $< -o [email protected] 
    
+0

소스가 종속성에 포함되어 있지 않으면 소스 파일을 수정 한 후 "모두 작성"을 실행하면 실행 파일이 다시 컴파일되지 않습니다. – dave

+1

.cpp.o :는 .cpp 파일 확장명을 가진 파일이 후속 명령을 실행하여 .o 버전의 파일로 변환 될 수 있음을 나타내는 구식 접미사 규칙입니다. GNU make OLD-FASHIONED SUFFIX 규칙에 대한 자세한 정보는 http://www.gnu.org/software/make/manual/make.html#Suffix-Rules에서 확인할 수 있습니다. – dave

답변

1

$(SOURCES)all의 의존성이 필요하거나 유용하지 않다 ".CPP .o 인을" 왜 쓸 수 없습니다. 종속성 정보는 실행 파일이 오브젝트 파일에 종속되고 오브젝트 파일이 소스 파일에 종속되도록해야합니다.

표기 :

.cpp.o: 

는 방법은 make 처리 컴파일 규칙의 원래 (7 판 UNIX ™) 버전이었다. GNU는 확인 (썬 확인)을 허용하는 % 표기법을 사용 :

%.o: %.cpp 

기본적으로, 그것은 생각해 보면 설계시 감각을 만들어 결정 어쩌면 덜 감각이었다. 가장 중대한 문제는 아니 었습니다 (커맨드 라인의 시작 부분에있을 것입니다).

+0

사람들이 아닌 탭의 문제점은 무엇입니까? 새로운 것을 때때로 잊어 버리는가? – eriktous

+0

거의 모든 곳에서 공백의 내용에 대해 불가지론합니다. 게다가, 실제로 AFAICT라는 유용한 서비스를 많이 제공하지 않습니다. 'makefile'을위한 파서는 커맨드 라인의 시작 부분에 임의의 공백을 허용하면 어렵지 않습니다. 그래서, 그것은 정말로 필요하지 않은 사용자 (특히 초급 사용자)에게 장애물을 만듭니다. –