2

変更して実行する必要がある C のプロジェクトがあります。ある時点で、私が持っているソースファイルで

#ifndef THE_FLAG
// declare important stuff
#endif

しかし、 dがどこから来たのTHE_FLAGかわかりません。#include私のプロジェクトでは定義されておらず、外部ライブラリのどこかに隠されています。

試してみgcc -Mましたが、ヘッダーが直接含まれているか、インクルード階層の上位に含まれているかどうかの情報なしで表示されます。

プロジェクトが複雑すぎて、すべての依存関係を手動で追跡することはできません。でビルドされ./configure && makeます。

質問:この外部依存関係を追跡するにはどうすればよいですか?

4

3 に答える 3

4

でコンパイルしてみてくださいgcc -E。これにより、gccは前処理段階で停止するように指示されます。その一環として、すべて#defineのがどこから来たのかがわかります。

これにより、ファイルではなくテキストファイルが作成されることに注意してください.o

于 2013-01-08T09:50:57.613 に答える
0

gcc -Eプリプロセッサの後に出力が得られます。.cただし、ファイルが非常に大きく、いくつかの大きなヘッダー ファイルが含まれているかどうかを開発者が確認するのが難しい場合があります。このような場合、ビルド出力の確認がより簡単になります。#warningコンパイル中に警告としてメッセージを出力します。

#ifndef THE_FLAG
#warning "including ABC stuff"
// declare important stuff
#endif

alsoを使用してコンパイラの警告を出すこともでき#pragmaますが、プラットフォームに依存しません。

#pragma "including ABC stuff"

不要なマクロがどこかに定義されている場合にコンパイルを停止したい場合は、#error.

#ifdef UNWANTED_FLAG
#error "Build stopped. UNWANTED flag has been defined"
#endif
于 2013-01-08T11:03:31.417 に答える