2
我已經在我的項目,叫做Core.h頭,我作爲預編譯頭使用:在Linux上預編譯的頭警告(太短是一個PCH文件)
$(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 [email protected]
MYLIB.a: $(MY_PCH) $(MY_OBJECTS)
$(AR) $(ARFLAGS) [email protected] $(MY_OBJECTS)
$(MY_PCH):
$(CXX) $(CXX_CFLAGS) -x c++-header Core.h
我使-j8,因此有8個線程。但即使沒有-j8,我仍然會收到警告。 – zedxz
@zedxz:好的,這是你的問題。 makefile並不表示其他對象文件依賴於預編譯頭,因此它會嘗試與預編譯頭並行地構建它們,並且您有競爭條件。使用make的依賴關係規則強制在需要它的編譯單元之前編譯預編譯頭文件。 –
絕對正確。將PCH添加爲對象而不是庫可以修復競爭條件。非常感謝你! – zedxz