問題: Visual Studio 2010に移行しようとしている大規模なVisual C++プロジェクトがあります。これは、さまざまなソースやさまざまな年齢層のものの巨大な組み合わせです。何かが両方を含むため、問題が発生していますwinsock.h
およびwinsock2.h
。
質問:#include
Visual Studio C++ソースファイルの階層?
cl /P
プリプロセッサの出力を取得しますが、どのファイルに他のファイルが含まれているかを明確に示していません(この場合は/P
出力は376,932行です8-)
完璧な世界では、ソースにジャンプできるように、行番号とともに、どのファイルに他のファイルが含まれているかを階層的に表示したいと思います。
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
コンパイラーは/ showIncludesスイッチもサポートします。行番号は表示されませんが、どこからのインクルードのかなり包括的なビューを表示できます。
[プロジェクトの設定]-> [構成プロパティ]-> [C/C++]-> [詳細]-> [インクルードを表示]にあります。
IncludeManager は非常に強力なツールであることがわかりました。無料ではありませんが(高価ではありません)、インクルードの問題を把握し、使用していないインクルードの大部分を削除することにより、コンパイル時間を50分から8分に短縮できました。
Gccの階層的インクルード機能ほど良くありません。これは、エラーが発生した場合に直接行のインクルージョン階層を示します。 VSの「show includes」オプションはすべてを表示します。これは、階層的なincludeファイルの問題をデバッグするときに過剰です。
こちら は、優れたサードパーティのFOSSツールです。結果をXMLにエクスポートできます。XMLには、出現回数と行番号に関するデータが含まれます。
IncludeToolbox と呼ばれるVisual Studioのプラグインがあります。依存するインクルードをリストし、ランダムな削除やコンパイルなどの処理を行って、そのインクルードが必要かどうかを確認できます。
redhat Source-Navigator を試してみてください グラフィカルソリューション 。
cl/Pは行番号を表示する必要があります。これにより、ヘッダーファイルのインクルード元のコンテキストを確認できます。
行をgrep outすると...
grep "^#line" file.i
...その後、プリプロセッサによって順番に検出されたファイルをかなり明確に示す必要があります。
1回限りのインシデントである場合、これは非常に迅速な診断になります。