プリコンパイル済みヘッダーファイルの最適な候補は何ですか?テンプレートを持っていても、そこにSTLとBoostヘッダを置くことはできますか?コンパイル時間を短縮できますか? また、コンパイル時間を短縮する最も良いIDE設定は何ですか?プリコンパイル済みのヘッダーには何を入れますか? (MSVC)
答えて
クイックアンサー:これらのヘッダーファイルでテンプレートクラスが定義されていても、STLとBoostヘッダーは実際にプリコンパイル済みヘッダーファイルに属します。
プリコンパイル済みのヘッダーファイルを生成するとき、コンパイラはヘッダーテキスト(重要なタスク)を解析し、コンパイラの利益に合わせて最適化されたバイナリ形式に変換します。
他の.cppファイルがコンパイルされたときにテンプレートクラスがインスタンス化されても、プリコンパイル済みヘッダーの情報からインスタンス化されます。
(後で追加)あなたが ないがプロジェクトの一部であり、一つ一つの.CPPファイルが含まれていても、頻繁に変更されたファイルをプリコンパイル済みヘッダーに含まれている必要があります
一つのことこれらのファイル。
これは、boost、stl、およびwindowsライブラリが非常に大きいため、プリコンパイル済みヘッダーの生成に時間がかかることが原因です。
すべてが使用する単純なファイル(「StringDefs.h」など)があるとします。 StringDefs.hがstdafx.hに含まれていて、1人の開発者がStringDefs.hに触れている場合、すべての開発者はのプリコンパイル済みヘッダーが再コンパイルするまで待つ必要があります。 StringDefs.hがプリコンパイルされたヘッダーから除外され、各.CPPファイルとともに解析されると、はるかに高速になります。
それは公正な点です。頻繁にファイルを変更するなど、ビルド時間が全体的に遅くなります。 – Andy
.cppファイルごとに1つのプリコンパイル済みヘッダーファイルのみを持つことができますが、複数のプリコンパイル済みヘッダーをプロジェクトに含めることができます。 –
PCHが再コンパイルされるのを待つだけでなく、それを使用するすべてのファイルに対しても待機する必要があります。 –
プリコンパイル済みのヘッダーには、そのプロジェクトのほとんどの.cppファイルに含めるものを入れます。これは実際にはどのヘッダファイルにも当てはまります。これにより、コンパイラはこれらのファイルを一度解析し、同じプロジェクト内のすべての.cppファイルでその情報を再利用することができます。
Andrew Shepherdの答えに1つ追加されました。頻繁に変更されないファイルに対しては、プロジェクトの外部にあるヘッダーファイルのプリコンパイル済みヘッダーを使用します。現在のプロジェクトのヘッダーファイルを常に変更している場合、おそらくそれらをプリコンパイルする価値はありません。
私は、コンパイル時間を短縮する技術に関する記事を書いています。これらの技術の中で、プリコンパイルされたヘッダのポストとそのアプリケーションは、hereで見つけることができます。また、面白いと思われるベストプラクティスに関するセクションもあります。それを透過的に処理するCMakeスクリプトが含まれています。
- 1. プリコンパイル済みヘッダー
- 2. Visual Studioで "プリコンパイル済みヘッダーの作成"(/ Yc)と "プリコンパイル済みヘッダーの使用"(/ Yu)の違いは何ですか?
- 3. Visual Studioのプリコンパイル済みヘッダーには何が含まれていますか?
- 4. プリコンパイル済みヘッダーの検出
- 5. ヘッダーファイルのプリコンパイル済みヘッダー
- 6. プリコンパイル済みヘッダーの問題?
- 7. MSVCプリコンパイル済みヘッダー: "stdafx.h"を#includeする必要があるファイルはどれですか?
- 8. プリコンパイル済みヘッダーを再構築
- 9. Qtのベストプラクティスとプリコンパイル済みヘッダー?
- 10. サイズが巨大なC++プリコンパイル済みヘッダー
- 11. プリコンパイル済みヘッダーと編集用ヘッダーファイル
- 12. 1つのファイルのプリコンパイル済みヘッダーを無効にする
- 13. Visual C++のプリコンパイル済みヘッダーに関する質問
- 14. デフォルトのテンプレートパラメータは、ヘッダがプリコンパイル済みヘッダーのXcode
- 15. プリコンパイル済みヘッダー(C/C++)を使用する理由
- 16. Qtプロジェクトでプリコンパイル済みヘッダーを使用する方法
- 17. Visual C++ LNK2019のリンク先のプリコンパイル済みヘッダーのエラー
- 18. 混合CおよびC++を使用したプリコンパイル済みヘッダー
- 19. GCC +のプリコンパイル済みヘッダーでスタックトレースが正しくない
- 20. Entity Framework:Enumerable.Containsのプリコンパイル済みクエリ
- 21. VC++ 2010プロジェクトで特定のファイルのプリコンパイル済みヘッダーを無効にする
- 22. VSでプリコンパイル済みヘッダーを再構築するにはどうすればよいですか?
- 23. プリコンパイル済みヘッダーのテンプレートをインスタンス化すると、コンパイル時間が短縮されますか?
- 24. -g ++でプリコンパイル済みヘッダをインクルードする
- 25. プリコンパイル済みヘッダーの警告(短すぎるPCHファイルであることを)
- 26. Android:プリコンパイル済みのライブラリを使用しますか?
- 27. プリコンパイル済みヘッダの元のファイル名
- 28. コンパイル時間を短縮するために、プロジェクト間でプリコンパイル済みヘッダーを共有できますか?
- 29. PythonモジュールのJinjaテンプレート(プリコンパイル済みテンプレート)
- 30. Windows x64用のプリコンパイル済みSQLiteバイナリ
PCHを使用しないことをお勧めします。理由は、(1)最初のインクルードが対応するヘッダーであることがわかっているので、ヘッダを知っていることを知っている(2)pchでの依存関係が完全に信頼できるものではなく、インクリメンタルビルドが信頼できなくなる非常に大規模なプロジェクトでは私の意見では、pchを使わないでバランスの取れた方が効率的で、信頼性の高いインクリメンタルビルドのメリットを享受できます。これは、もはや最新のVisual Studioバージョンでは当てはまらないかもしれません。その経験はまだ十分ではありません。 – Permaquid