C++ Linux上的预编译头警告(太短,不能是PCH文件)
我在我的项目中有一个标题名为Core.h,我将其用作预编译标题:C++ Linux上的预编译头警告(太短,不能是PCH文件),c++,linux,g++,gnu,precompiled-headers,C++,Linux,G++,Gnu,Precompiled Headers,我在我的项目中有一个标题名为Core.h,我将其用作预编译标题: $(CXX) $(CXX_CFLAGS) -x c++-header Core.h 这将创建一个名为Core.h.gch的文件 *#include“Core.h”是模块中每个源文件的第一个指令 在OSX上,它运行得很好——我的项目编译得很好&编译速度相当快 但是,在Linux上,我的100多个文件中有7个给出了以下警告: 警告:Core.h.gch:太短,不能作为PCH文件 与其他所有源文件一样,#include“Core.h”
$(CXX) $(CXX_CFLAGS) -x c++-header Core.h
这将创建一个名为Core.h.gch的文件
*#include“Core.h”
是模块中每个源文件的第一个指令
在OSX上,它运行得很好——我的项目编译得很好&编译速度相当快
但是,在Linux上,我的100多个文件中有7个给出了以下警告:
警告:Core.h.gch:太短,不能作为PCH文件
与其他所有源文件一样,#include“Core.h”
是这些文件的第一行
有人见过这个吗?可能的原因?为什么只有少数包含PCH的文件会发出警告
我在Linux上使用gcc版本4.1.2,在OSX上使用gcc版本4.2.1
谢谢
编辑:
以下是我构建库的基本方法:
.PHONY: all
all: $(MY_PCH) MYLIB.so MYLIB.a
MYLIB.so: $(MY_PCH) $(MY_OBJECTS)
$(CXX) $(MY_OBJECTS) $(CXX_LDFLAGS) -o $@
MYLIB.a: $(MY_PCH) $(MY_OBJECTS)
$(AR) $(ARFLAGS) $@ $(MY_OBJECTS)
$(MY_PCH):
$(CXX) $(CXX_CFLAGS) -x c++-header Core.h
你用的是平行牌吗?可能是g++试图读取.gch文件,而另一个实例正在写入该文件。我生成了-j8,因此有8个线程。但是即使没有-j8,我仍然会收到警告。@zedxz:这是你的问题。makefile并不表示其他对象文件依赖于预编译头,因此它尝试与预编译头并行构建它们,并且您有一个竞争条件。使用make的依赖规则强制在需要它的编译单元之前生成预编译头。绝对正确。将PCH作为deptency添加到对象而不是库中可以修复争用条件。非常感谢你!