6

私は、複数の環境、主に linux/gcc と windows/msvc でビルドする必要がある大規模なプロジェクトに取り組んでいます。ビルドを高速化するために、プリコンパイル済みヘッダーを使用します。

Windows の実装は非常に効率的です。私のクアッドコア ハイパースレッディング i7 では、ビルド時間が 9 分から 1.5 分に短縮されました。ただし、プリコンパイル済みヘッダーを使用してもパフォーマンスは向上しないようです。どちらの場合も、同じコンピューターの仮想ボックスで 22 分、実サーバーで約 40 分でビルドされます。

だから私は明らかに、何かが間違っていて、プリコンパイルされたヘッダーが機能していないことを考えています。しかし、何が見つかりません。

Makefile は CMake によって生成されるため、ヘッダーのコンパイルに使用されるコードとそれらを使用するオブジェクト ファイルをコピーして貼り付けることができます。

ヘッダーの作成:

/usr/bin/c++ -O3 -DNDEBUG --no-warnings "-I/mnt/code/server a/src/game"
"-I/mnt/code/server a/src/game/vmap" "-I/mnt/code/server a/dep/include/g3dlite"
"-I/mnt/code/server a/dep/include" "-I/mnt/code/server a/src/shared"
"-I/mnt/code/server a/src/framework" "-I/mnt/code/server a/buildlinux"
"-I/mnt/code/server a/buildlinux/src/shared" -I/usr/include/mysql
"-I/mnt/code/server a/dep/acelite" -DDO_MYSQL -DHAVE_CONFIG_H
-DVERSION=\"0.6.1\" -DSYSCONFDIR=\"../etc/\" -D_RELEASE -D_NDEBUG -x c++-header
-o "/mnt/code/server a/buildlinux/src/game/pchdef.h.gch" "/mnt/code/server
a/src/game/pchdef.h"

オブジェクトファイルのコンパイル:

/usr/bin/c++ $(CXX_DEFINES) $(CXX_FLAGS) "-I/mnt/code/server
a/buildlinux/src/game" -include pchdef.h -Winvalid-pch -o
CMakeFiles/game.dir/AccountMgr.cpp.o -c "/mnt/code/server
a/src/game/AccountMgr.cpp"

上記のスニペットから直接得られたものでなくても、洞察を歓迎します。

4

1 に答える 1

1

GCC でプリコンパイル済みヘッダーを使用する場合、注意が必要な点がいくつかあります。まず、cpp ファイルがコンパイルされるのと同じ引数を使用して、プリコンパイル済みヘッダーを作成する必要があります。また、実際に AccountMgr.cpp にプリコンパイル済みヘッダーを含めていると思いますか?

フラグを付けてコンパイルしてみてください-H。これにより、考慮されているインクルード ファイルが出力されます。pchdef ファイルが記述されていることを確認し、解析されている他のインクルード ファイルを確認します。無効な PCH ファイルについて gcc に警告させるには、-Winvalid-pch.

于 2012-09-23T22:12:12.243 に答える