良い提案はありますか?入力はヘッダー ファイルの名前になり、出力はそれを直接的または間接的に含むすべてのファイルのリスト (できればツリー) になります。
10 に答える
GCC/G++ にアクセスできる場合、-M
オプションは依存関係リストを出力します。他のツールが行う余分なことは何もしませんが、コンパイラからのものであるため、「間違った」場所からファイルを取得する可能性はありません。
KeithBに感謝します。cl.exe (VS2008) のドキュメントを調べたところ、/showIncludes フラグが見つかりました。IDE から、これは任意の CPP ファイルのプロパティ ページから設定できます。
重いソリューションについては、doxygenをチェックしてください。コードベースをスキャンし、コードを文書化する Web サイトを効果的に作成します。それが示す多くのことの 1 つは、インクルード ツリーです。
このツールの出力を他のプロセスにプラグインできるようにしたい場合、これはうまくいかないかもしれません (doxygen は他のフォーマットに出力しますが、私はその機能に詳しくありません)。ただし、依存関係を単に目で確認したい場合は、うまく機能するはずです。
私はcinclude2dotと呼ばれるツールで遊んだことがあります。私がここで働くようになったとき、それはかなり大きなコードベースのハンドルを取得するのに非常に役に立ちました。私は実際にそれを私たちのデイリービルドに統合することを最終的に考えました。
まず、cinclude2dot.pl は C/C++ コードを分析し、graphviz への入力用のドット ファイルとして #include 依存関係グラフを生成する perl スクリプトです。
http://www.flourish.org/cinclude2dot/
その種の手動ツールを使いたくない場合、私の意見では、ProFactor の「IncludeManager」と呼ばれるツールが圧倒的に勝者です。
http://www.profactor.co.uk/includemanager.php
無料トライアルがあり、素晴らしいです。完全に統合された Visual Studio 用のプラグインなので、ここにあるものをダブルクリックすると、そこに含まれている場所に移動します。
ツールチップのマウスオーバーは、必要なすべての情報を提供し、ドリルダウン/アップ、気にしないサブツリー全体の削除、グラフ以外の表現の表示、これとあれの一致のリストの循環を可能にします。素晴らしい.
迅速に対応できる場合は、試用期間が終了する前に、大規模なプロジェクトの #include 構造をリファクタリングできます。それでも、1 ライセンスあたり約 35 ドルと、それほど費用はかかりません。
それが何をするかについては、ほぼ完璧です。#include グラフだけでなく、共有ファイルのクロス プロジェクト依存関係、ビルド時間への影響、グリッド内の詳細なプロパティ、完璧です。
朗報:redhat Source-Navigator(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)
(これらのインデントを必ずハードタブに変更してください。)
makedependをチェックアウトすることもできます:
C ++を理解することはあなたを助けることができるはずです:それはあなたがPerlからアクセスできるデータベースを構築します。
cscope ( http://cscope.sourceforge.net/ ) はスタンドアロンの xterm でこれを行い、お好みのエディター内で使用することもできます - それは優れた emacs と vi/vim をサポートしています。