2011-09-09 5 views
2

내가 미리 컴파일 된 헤더로 사용하는 것이, Core.h라는 내 프로젝트에 헤더가 (너무 짧게는 PCH 파일을 할 수) :사전 컴파일 된 헤더 경고

$(CXX) $(CXX_CFLAGS) -x c++-header Core.h 

어떤 Core.h.gch라는 파일을 만듭니다.

*#include "Core.h"은 모듈의 모든 소스 파일의 첫 번째 지시어입니다.

OS X에서는 괜찮습니다. - 내 프로젝트는 꽤 괜찮습니다. & 꽤 빨리 컴파일됩니다.

리눅스 그러나 내 100 개 이상의 파일 (7)는 다음과 같은 경고 제공 :

경고 : Core.h.gch :하기에는 너무 짧은 PCH를 그냥 모든 다른처럼

파일 소스 파일, #include "Core.h"은이 파일의 첫 행입니다.

아무도이 문제를 발견하지 못했습니까? 가능한 원인들? 왜 경고를 줄 PCH를 포함하는 파일이 몇 개 밖에 없습니까?

나는 감사

OSX

에 리눅스 4.2.1에서 GCC 버전 4.1.2을 사용!

편집 :

.PHONY: all 
all: $(MY_PCH) MYLIB.so MYLIB.a 

MYLIB.so: $(MY_PCH) $(MY_OBJECTS) 
    $(CXX) $(MY_OBJECTS) $(CXX_LDFLAGS) -o [email protected] 

MYLIB.a: $(MY_PCH) $(MY_OBJECTS) 
    $(AR) $(ARFLAGS) [email protected] $(MY_OBJECTS) 

$(MY_PCH): 
    $(CXX) $(CXX_CFLAGS) -x c++-header Core.h 

답변

3

가 병렬 메이크업을 사용하고 있습니까 : 나는 라이브러리를 빌드하는 방법

다음

는 기본적으로? 아마도 g ++은 .gch 파일을 읽으려고 시도하고있는 반면 다른 인스턴스는이 파일에 쓰려고합니다.

+0

나는 8 스레드를 사용하므로 -j8을 만듭니다. 그러나 -j8 없이도 나는 여전히 경고를 받는다. – zedxz

+1

@zedxz : 음, 문제가 있습니다. makefile은 다른 오브젝트 파일이 프리 D 파일 된 헤더에 종속되어 있음을 나타내지 않으므로 프리 D 파일 된 헤더와 병렬로 빌드하려고 시도하며 사용자는 경쟁 조건을 갖습니다. make의 의존성 규칙을 사용하여 미리 컴파일 된 헤더를 필요로하는 컴파일 유닛 전에 강제로 작성하십시오. –

+0

이 맞습니다. 라이브러리가 아닌 개체에 대한 폐지로 PCH를 추가하면 경쟁 조건이 수정됩니다. 고마워요! – zedxz

관련 문제