私は、プリコンパイル済みヘッダーとして使用することを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
私は-j8を作ります。したがって、8スレッドです。しかし、-j8がなくても、私はまだ警告を受け取ります。 – zedxz
@zedxz:あなたの問題があります。 makefileは、他のオブジェクトファイルがプリコンパイルされたヘッダーに依存していることを示していないため、プリコンパイルされたヘッダーと並列にビルドしようとします。 makeの依存関係規則を使用して、コンパイル済みヘッダーを必要とするコンパイル単位の前に強制的にビルドします。 –
が一番合っています。ライブラリではなくオブジェクトへの抑制としてPCHを追加すると競合状態が修正されます。どうもありがとうございました! – zedxz