111

doxygenを使用して簡単なクラス図を生成する方法を説明する資料を探していましたが、見つかりませんでした。誰か助けてもらえますか?

C++ファイルのセットから次のような図を作成する必要があります。 代替テキスト

これを簡単に実現するためのより良いツールがあれば、私に知らせてください。

4

6 に答える 6

64

うーん、これは少し古い質問のようですが、私はここ数日Doxygenの構成をいじっていたので、私の頭はまだ最新の情報でいっぱいですが、それを突き刺してみましょう-

私は前の答えがほとんどそれを持っていると思います:

不足しているオプションはCOLLABORATION_GRAPH = YES、Doxyfileを追加することです。私はあなたがdoxywizardGUIのどこかで同等のことをすることができると思います(私はdoxywizardを使いません)。

したがって、より完全な例として、私がよく使用するUML出力に関連する一般的な「Doxyfile」オプションは次のとおりです。

EXTRACT_ALL          = YES
CLASS_DIAGRAMS      = YES
HIDE_UNDOC_RELATIONS = NO
HAVE_DOT             = YES
CLASS_GRAPH          = YES
COLLABORATION_GRAPH  = YES
UML_LOOK             = YES
UML_LIMIT_NUM_FIELDS = 50
TEMPLATE_RELATIONS   = YES
DOT_GRAPH_MAX_NODES  = 100
MAX_DOT_GRAPH_DEPTH  = 0
DOT_TRANSPARENT      = YES

これらの設定により、「継承」( )図CLASS_GRAPH=YESと「コラボレーション」(COLLABORATION_GRAPH=YES)図の両方が生成されます。

doxygen出力の「展開」のターゲットによっては、設定DOT_IMAGE_FORMAT = svgも役立つ場合があります。svg出力を使用すると、ダイアグラムは.pngなどのビットマップ形式の固定解像度ではなく「スケーラブル」になります。どうやら、IE以外のブラウザで出力を表示する場合INTERACTIVE_SVG = YESは、生成されたsvg図の「インタラクティブなズームとパン」を可能にするものもあります。私は少し前にこれを試しましたが、svg出力は非常に視覚的に魅力的でしたが、当時、svgのブラウザーサポートはまだ少し一貫性がなかったので、状況が最近改善された可能性があります。

他のコメントが述べているように、これらの設定のいくつかは(DOT_GRAPH_MAX_NODES特に)パフォーマンスに影響を与える可能性があるため、YMMVです。

私は「RTFM」スタイルの回答を嫌う傾向があるので、この文についてお詫びしますが、この場合、Doxygenのドキュメントは本当にあなたの友達なので、上記の設定でDoxygenのドキュメントをチェックしてください-前回見たときに詳細を見つけることができますhttp://www.doxygen.nl/manual/config.html

于 2016-07-12T07:46:27.850 に答える
57

Doxygenは継承図を作成しますが、クラス全体の階層を作成するとは思いません。GraphVizツールを使用できます。Doxygen GUIフロントエンドツールを使用する場合は、関連するオプションがにありますStep2: -> Wizard tab -> Diagrams。DOTリレーションオプションは[エキスパート]タブの下にあります。

于 2011-01-21T06:41:24.887 に答える
49

この投稿からの引用(doxygen自身の作者によって書かれています):

run doxygen -g and change the following options of the generated Doxyfile:

    EXTRACT_ALL            = YES
    HAVE_DOT               = YES
    UML_LOOK               = YES

run doxygen again
于 2013-03-06T13:18:56.997 に答える
7

Enterprise Architectは、インポートされたソースコードからUML図を作成します。

于 2014-07-30T16:07:00.180 に答える
5

doxysファイルを編集し、GENERATE_UML(そのようなもの)をtrueに設定する必要があると思います。そして、dot/graphvizをインストールする必要があります。

于 2011-01-21T06:28:31.327 に答える
5

最高の2つの賛成の答えは正しいです。今日の時点で、 (デフォルト設定から)変更する必要があるのは、組み込みのジェネレーターの代わりにドットを使用した生成を有効にすることだけでした。

いくつかの重要な注意事項:

  • Doxygenは、プロジェクト内のすべてのクラスの実際の完全な図を生成しません。階層ごとに個別の画像が生成されます。複数の無関係なクラス階層がある場合は、複数の画像を取得します。
  • これらの図はすべて、html/inherits.htmlまたは(Webサイトのナビゲーションから)クラス=>クラス階層=>「テキストクラス階層に移動」にあります。
  • これはC++の質問なので、テンプレートについて話しましょう。特にから継承する場合T
    • 各テンプレートのインスタンス化は、Doxygenによって異なるタイプと正しく見なされます。異なるインスタンス化から継承するタイプは、ダイアグラム上で異なる親クラスを持ちます。
    • クラステンプレートfooがから継承しTTテンプレートタイプパラメータにデフォルトがある場合、そのようなデフォルトが想定されます。デフォルトとは異なる場所barから継承するタイプがある場合は、親があります。共通の親はありません。foo<U>Ubarfoo<U>foo<>bar<U>
    • テンプレートパラメータの少なくとも1つを継承する複数のクラステンプレートがある場合、テンプレートタイプパラメータがコード内でまったく同じ名前である限り、Doxygenはこれらのクラステンプレートの共通の親を想定します。これにより、命名の一貫性が促進されます。
    • CRTPとリバースCRTPは正しく機能します。
    • 再帰的なテンプレート継承ツリーは展開されません。variantから継承するインスタンス化が表示されますvariant<Ts...>
    • インスタンス化されていないクラステンプレートが描画されています。それら<...>の名前には、デフォルトがなかったタイプおよび非タイプのパラメーターを表す文字列が含まれます。
    • クラステンプレートの完全および部分的な専門分野も描かれています。スペシャライゼーションが異なるタイプから継承する場合、Doxygenは正しいグラフを生成します。
于 2020-01-19T22:37:58.410 に答える