내가 미리 컴파일 된 헤더로 사용하는 것이, 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
나는 8 스레드를 사용하므로 -j8을 만듭니다. 그러나 -j8 없이도 나는 여전히 경고를 받는다. – zedxz
@zedxz : 음, 문제가 있습니다. makefile은 다른 오브젝트 파일이 프리 D 파일 된 헤더에 종속되어 있음을 나타내지 않으므로 프리 D 파일 된 헤더와 병렬로 빌드하려고 시도하며 사용자는 경쟁 조건을 갖습니다. make의 의존성 규칙을 사용하여 미리 컴파일 된 헤더를 필요로하는 컴파일 유닛 전에 강제로 작성하십시오. –
이 맞습니다. 라이브러리가 아닌 개체에 대한 폐지로 PCH를 추가하면 경쟁 조건이 수정됩니다. 고마워요! – zedxz