何か良い提案はありますか?入力はヘッダーファイルの名前で、出力はそれを直接または間接的に含むすべてのファイルのリスト(できればツリー)である必要があります。
#include
関係を処理するためのツールが他にもたくさんあることに注意したいと思います。
何か良い提案はありますか?入力はヘッダーファイルの名前で、出力はそれを直接または間接的に含むすべてのファイルのリスト(できればツリー)である必要があります。
#include
関係を処理するためのツールが他にもたくさんあることに注意したいと思います。
回答:
GCC / G ++にアクセスできる場合、-M
オプションは依存関係リストを出力します。他のツールが行うような追加のことは何もしませんが、コンパイラからのものであるため、「間違った」場所からファイルを取得する可能性はありません。
-H
木さえも与える!
-MM
システムヘッダーをスキップする
-o
オプションを指定すると、コンパイラは出力をstdoutではなくfileに書き込みます。
stderr
代わりに出力されますstdout
。それ以外の場合、このオプションはより一般的です。
KeithBに感謝します。cl.exe(VS2008)のドキュメントを調べて、/ showIncludesフラグを見つけました。IDEから、これは任意のCPPファイルのプロパティページから設定できます。
math.h
私はcinclude2dotと呼ばれるツールをいじってみました。私がここで働くようになったとき、それはかなり大きなコードベースでハンドルを取得するのにかなり役に立ちました。最終的には、それを毎日のビルドに統合することを実際に考えました。
.cc/.c/.cxx
ファイルがないフォレスト(その中の.h
ファイルのみ)は冗長である可能性があります。
まず、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をサポートしています。