コンパイラがソース(eg)ファイルをコンパイル*.cpp
すると、オブジェクトファイル(eg *.o
)が作成されるため、後で他のファイル(Windowsの場合はファイル)にリンクされ.o
、.so
実行.lib
可能ファイルが構成されます。
ここで、いくつかの.pchファイルを作成するたびにヘッダーファイルをコンパイルしないという類推的な状況で、リンカーによってリンクされます。
ここで、Visula Studioプロジェクトのスコープ内でプリコンパイル済みヘッダーが定義されている場合、Visual Studio**fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?**
がヘッダーファイルが.cppファイルに含まれていないというエラー(例)で文句を言うのはなぜですか。
要約すると、ここに私の質問があります:
- 各.cppファイルにプロジェクトのプリコンパイル済みヘッダーが必要なのはなぜですか?
- 各コンパイルユニットにプリコンパイル済みヘッダーが存在するという要件は、コンパイルプロセスをどのように最適化しますか?言い換えれば、この要件の利点は何ですか?(どこに含めるか、どこに含めないかはユーザー次第です!)
- プリコンパイル済みヘッダーが.pchファイルの2%のみを使用する.cppファイルに含まれている場合、残りの98%は対応する.oファイルに追加されますか?