2011-09-09 19 views
2

私は、プリコンパイル済みヘッダーとして使用することをCore.hと呼ばれる私のプロジェクトでは、ヘッダ、持っている:プリコンパイル済みヘッダーの警告(短すぎるPCHファイルであることを)

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

Core.h.gchという名前のファイルを作成します。

*#include "Core.h"は、モジュール内のすべてのソースファイルの最初の指令です。

OS Xでは、うまく動作します。私のプロジェクトはきれいにコンパイルされます。&かなりコンパイルされます。 Linuxの

しかし、7の私の100+ファイルは、次の警告を与える:

警告:Core.h.gch:PCHはただ、他のすべてのよう

を提出することには短すぎるがソースファイル、#include "Core.h"は、これらのファイルの最初の行です。

誰もがこれを遭遇しましたか?考えられる原因?なぜ警告を出すPCHを含むファイルがいくつかしかないのでしょうか?

私は4.2.1

OSX上のおかげで、Linux上で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

あなたは、並列のmakeを使用していますか?おそらくg ++は別のインスタンスが書き込んでいる間に.gchファイルを読み込もうとしています。

+0

私は-j8を作ります。したがって、8スレッドです。しかし、-j8がなくても、私はまだ警告を受け取ります。 – zedxz

+1

@zedxz:あなたの問題があります。 makefileは、他のオブジェクトファイルがプリコンパイルされたヘッダーに依存していることを示していないため、プリコンパイルされたヘッダーと並列にビルドしようとします。 makeの依存関係規則を使用して、コンパイル済みヘッダーを必要とするコンパイル単位の前に強制的にビルドします。 –

+0

が一番合っています。ライブラリではなくオブジェクトへの抑制としてPCHを追加すると競合状態が修正されます。どうもありがとうございました! – zedxz

関連する問題