質問
何か良い提案はありますか?入力はヘッダー ファイルの名前で、出力はそれを直接的または間接的に含むすべてのファイルのリスト (できればツリー) でなければなりません。
解決
GCC/G++ にアクセスできる場合は、 -M
オプション 依存関係リストを出力します。他のツールが行うような追加の処理は行いませんが、コンパイラーから提供されるため、「間違った」場所からファイルを取得する可能性はありません。
他のヒント
KeithB に感謝します。cl.exe (VS2008) のドキュメントを検索したところ、/showinclude フラグが見つかりました。IDE では、CPP ファイルのプロパティ ページからこれを設定できます。
重量のあるソリューションについては、以下をチェックしてください。 酸素. 。コードベースをスキャンして、コードを文書化する Web サイトを効果的に作成します。それが示す多くのことの 1 つは、木が含まれていることです。
このツールの出力を他のプロセスに接続できるようにしたい場合、これは機能しない可能性があります (doxygen は他の形式に出力しますが、私はその機能に詳しくありません)。ただし、単に依存関係を確認したいだけの場合は、うまく機能するはずです。
というツールを使って遊んでみました cinclude2dot. 。私がここで働くようになったとき、かなり大きなコードベースを把握するのに非常に役立ちました。実は、最終的にはそれを毎日のビルドに組み込むことを考えていました。
まず、cinclude2dot.pl は、C/C++ コードを分析し、graphviz への入力用のドット ファイルとして #include 依存関係グラフを生成する Perl スクリプトです。
http://www.florish.org/cinclude2dot/
そのような手動ツールを使用したくない場合は、断然勝者は ProFactor の「IncludeManager」として知られるツールだと思います。
http://www.profactor.co.uk/includemanager.php
無料お試しもあって、すごいですね。これは完全に統合された Visual Studio のプラグインなので、ここにあるものをダブルクリックすると、そこに含まれている場所に移動します。
ツールチップのマウスオーバーにより、必要なすべての情報が得られ、ドリルダウン/ドリルアップしたり、気にしないサブツリー全体を削除したり、グラフ以外の表現を表示したり、あれやこれやの一致リストを循環したりすることができます。これは素晴らしいことです。
迅速に対応できれば、試用期間が終了する前に大規模なプロジェクトの #include 構造をリファクタリングできます。それでも、ライセンスあたり約 35 ドルとそれほど費用はかかりません。
機能としては、ほぼ完璧です。#include グラフだけでなく、共有ファイルのプロジェクト間の依存関係、ビルド時間への影響、グリッドの詳細なプロパティも完璧です。
良いニュース: redhat ソースナビゲーター (Windowsでも動作します)。もちろん、コンパイラ スイッチ (前述) は優れた解析機能を備えていますが、これが MFC、Qt、およびそれらのマジック キーワードをどのように処理するかはわかりません。
基礎を築く KeithBさんの答え, 、1) 依存関係ファイルを自動的に生成し、2) 依存関係ファイルを最新の状態に保ち、3) それらを Makefile で使用するための GNUmake 構文は次のとおりです。
.dep:
mkdir $@
.dep/%.dep: %.c .dep
(echo $@ \\; $(CC) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
.dep/%.dep: %.cpp .dep
(echo $@ \\; $(CXX) $(IFLAGS) -MM $<) > $@ || (rm $@; false)
DEPEND := $(patsubst %.dep,.dep/%.dep,$(OBJ:.o=.dep))
-include $(DEPEND)
(これらのインデントを必ずハードタブに変更してください。)
チェックアウトすることもできます 依存させる:
C++ について理解する あなたを助けることができるはずです:Perl からアクセスできるデータベースを構築します。
cscope (http://cscope.sourceforge.net/) はスタンドアロンの xterm でこれを実行しますが、お気に入りのエディター内で使用することもできます。優れた emacs と vi/vim サポートを備えています。
無料のツールがあります ファイル依存関係ウォッチャーを含める