c++ - Linux 上的预编译头警告(太短,无法成为 PCH 文件)

标签 c++ linux g++ gnu precompiled-headers

我的项目中有一个名为 Core.h 的 header ,我将其用作预编译 header :

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

这将创建一个名为 Core.h.gch 的文件

*#include "Core.h" 是模块中每个源文件的第一个指令。

在 OS X 上,它工作得很好——我的项目编译得很好而且编译得很快。

但是在 Linux 上,我的 100 多个文件中有 7 个给出了以下警告:

警告:Core.h.gch:太短,无法成为 PCH 文件

就像所有其他源文件一样,#include "Core.h" 是这些文件的第一行。

有人遇到过这种情况吗?可能的原因?为什么只有少数包含 PCH 的文件会发出警告?

我在 Linux 上使用 gcc 版本 4.1.2,在 OSX 上使用 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

最佳答案

您使用的是并行 make 吗?可能 g++ 正在尝试读取 .gch 文件,而另一个实例正在写入该文件。

关于c++ - Linux 上的预编译头警告(太短,无法成为 PCH 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357042/

相关文章:

c++ - 为什么相同大小的函数参数中的隐式转换不会引发警告?

linux - 在 Fedora 17 上安装 Boost.Log

c++ - 使c++可执行

c++ - 按排序顺序迭代 std::vector

c++ - STL或Boost中是否有容器在修改后保留排序值?

php - 从 Bash 脚本执行 PHP 脚本

python - 特定python进程的看门狗

c++ - 移动构造对象的 GCC 奇怪行为

c++ - 共享对象符号解析

c++ - 为特定参数类型设置未知类型或重载运算符的初始值