3

背景:私は、複数の実行可能ファイルとライブラリ出力を使用して、一連の作業用 make ファイルを含む大規模な C++ プロジェクトに取り組んでいます (つまり、コード ベース全体があると仮定すると、make と入力すると、すべてのライブラリと実行可能ファイルがビルドされます)。

私の問題は、プロジェクトを部分的にコンパイルし、プロジェクトの他の部分用に既にコンパイルされているライブラリにリンクする必要があることです。プロジェクトの他の部分の lib ファイルが提供されていますが、ライブラリを使用するために必要なすべてのヘッダー ファイルが提供されているわけではありません。

質問:コンパイルを正常に終了し、プロジェクトのコンパイル済み部分に依存するプロジェクトの部分をリンクするために要求する必要があるファイルのリストを生成するにはどうすればよいですか? make ファイルを実行しただけで、最初に不足している依存関係についてエラーが発生しますが、すべての依存関係のリストを生成するにはどうすればよいですか?

私が試したこと / 例: make スクリプトを起動してコンパイルおよびリンクしmoduleAます。moduleBCommon.hmake はしばらく混乱し、その後、 から含まれていた が見つからないというエラーを発行しますmoduleAxyz.h。ディスク上に存在しないため、ファイルを見つけることができません... ファイルが提供されていないため、要求する必要があります。

4

3 に答える 3

5

gcc コンパイラを使用している場合、次のコマンドを実行すると不足しているヘッダー ファイルが表示されます。

gcc -M -MG filename.cpp

これはすべての依存関係をリストします:

gcc -M filename.cpp

これは、システム ヘッダーに属さない依存関係を一覧表示します。

gcc -MM filename.cpp
于 2012-11-16T21:51:54.147 に答える
3

If you don't have moduleBCommon.h, then you can't know what other headers it #includes, so I don't think it's possible to create the whole list before obtaining any of the missing headers.

Why can't you ask for all the header files associated with the libraries? Whoever is in charge of the libraries has already goofed by not providing them, and if nobody knows which header files go with the libraries then clearly someone has bungled the source control, so management should tolerate iterative requests from you.

(Unless your managers are technically incompetent, computer-illiterate, logically challenged MBA types, which is quite possible.)

于 2012-11-16T14:04:48.847 に答える
1

不足しているファイルの代わりに、すぐに気になるのは、より多くの未定義の型、クラス、または関数です。見逃したファイルのリストを作成することは、最初のステップにすぎません。これらのファイルは、必要に応じて定義がないクラスを前方宣言する可能性があるためです。

そのような依存関係を検出するために私が使用した唯一の無料ツールはcppcheckでした。開発は大幅に減速したようで、いくつかの典型的な誤検知が発生しますが、それ以外はその役割を果たします。

于 2012-11-16T13:45:29.050 に答える