2011-09-09 5 views
1

저는 기본적으로 다음과 같은 간단한 makefile을 가지고 있습니다.미리 컴파일 된 헤더는 모든 make에서 생성됩니까?

# Pre-compiled header 
CORE_PCH_FILENAME =Core.h 

CORE_PCH: 
     $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 

#Objects 
obj/%.o: CORE_PCH %.cpp obj/%.d 
     @mkdir -p obj 
     $(CXX) $(CXX_CFLAGS) -c $*.cpp -o [email protected] 

#Dependencies 
obj/%.d: %.cpp 
     @mkdir -p obj 
     $(CXX) $(CXX_CFLAGS) -MM -MT obj/$*.o -MF [email protected] $< 

제 문제는 처음 만들 때 Core.h.gch가 만들어지고 프로젝트가 만들어집니다. 괜찮아.

그러나 아무것도 변경하지 않더라도 make를 다시 실행하면 Core.h.gch가 다시 만들어지고 모든 것이 다시 컴파일됩니다.

미리 컴파일 된 헤더가 없다면 make는 잘 동작합니다 (아무 것도 변경되지 않은 경우 아무것도 다시 빌드하지 않고 수정이 필요한 경우에만 다시 빌드합니다).

하지만 정말하고 싶습니다. 미리 컴파일 된 헤더를 가지고 있습니다. 제가 제대로하지 않는 것이 있습니까?

편집 :

다음 제안되었습니다 :

# Pre-compiled header 
$(CORE_PCH_FILENAME) =Core.h 
CORE_PCH: $(CORE_PCH_FILENAME) 
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 

그러나 그것은 여전히 ​​때마다 만들어집니다. (

답변

4

문제는 gch을 이름으로 참조하지 않으며 문자 그대로 CORE_PCH이라는 파일이 없음을 나타냅니다. 시도 :

CORE_PCH_FILENAME=Core.h 
CORE_PCH=$(CORE_PCH_FILENAME).gch 

$(CORE_PCH): 
    $(CXX) $(CXX_CFLAGS) -x c++-header $(CORE_PCH_FILENAME) 
+0

(내 편집을 참조)을 시도했지만;) – zedxz

2

CORE_PCH가 OBJ/%를위한 전제 조건에 때마다 작성되는 오 , 전제 조건 자체가 없으므로 항상 빌드됩니다 .CORE_PCH의 사전 요구 사항에 Core.h를 추가하면이를 처리해야합니다.

+0

흠, 대단히 감사합니다 .. 아아 작동 – zedxz

관련 문제