doxygen을 사용하여 C ++ 소스에서 UML 클래스 다이어그램을 만드는 방법


90

doxygen으로 간단한 클래스 다이어그램을 생성하는 방법을 설명하는 자료를 찾고 있었지만 찾을 수 없었습니다. 아무도 도울 수 있습니까?

C ++ 파일 집합에서 아래와 같이 다이어그램을 만들어야합니다. 대체 텍스트

이 작업을 더 쉽게 수행 할 수있는 더 좋은 도구가 있으면 알려주세요.


속성 및 메소드 유형에 대한 정보를 포함하여 이와 같은 다이어그램을 얻었습니까?
IzZy

답변:


50

Doxygen은 상속 다이어그램을 만들지 만 전체 클래스 계층을 만들 것이라고 생각하지 않습니다. GraphViz 도구를 사용할 수 있습니다. Doxygen GUI 프런트 엔드 도구를 사용하는 경우에서 관련 옵션을 찾을 수 있습니다 Step2: -> Wizard tab -> Diagrams. DOT 관계 옵션은 전문가 탭 아래에 있습니다.


6
전체 계층 구조를 탐색 할 수 있으며 한계는 다이어그램에 표시되는 항목에 있습니다. 그래프의 범위를 제한하는 몇 가지 매개 변수가 있습니다. DOT_GRAPH_NODES는 단일 페이지의 항목 수를 제한하고 MAX_DOT_GRAPH_DEPTH는 페이지의 깊이를 제한합니다. 이 값을 큰 값으로 설정하면 큰 프로젝트의 경우 시간이 많이 걸립니다.
DanS

감사. 그것은 나를 위해 일했습니다. 또한 Expert-> Dot
tsenapathy

46

이 게시물의 인용문 (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

11
이것은 전체 클래스 다이어그램 (예 : 클래스 A와 클래스 B 사이의 다 대일 관계)을 생성하지 않습니다. 상속 다이어그램 만, 즉 수퍼 클래스 / 서브 클래스 관계를 보여줍니다.
stepthom

39

흠, 이것은 약간 오래된 질문 인 것 같지만 지난 며칠 동안 Doxygen 구성을 엉망으로 만들었 기 때문에 내 머리는 여전히 현재 정보로 가득 차있는 동안 찔러 보자.

이전 답변에는 거의 있다고 생각합니다.

누락 된 옵션은 COLLABORATION_GRAPH = YESDoxyfile 에 추가 하는 것입니다. 나는 당신이 doxywizard GUI 어딘가에서 동등한 일을 할 수 있다고 가정합니다 (나는 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 .


좋은 대답입니다. 귀하의 답변에서 "CLASS_GRAPH"인 경우 대신 "CLASS _DIAGRAMS"를 썼습니다.
DavidS

흠, 실제로, 이제 그것을 불러 오십시오. CLASS_DIAGRAMS = YES 및 CLASS_GRAPH = YES가 모두 있습니다. Doxygen 1.8.9.1 문서를 확인한 후 실제로 CLASS_GRAPH = YES가 CLASS_DIAGRAMS = YES를 재정의하므로 두 옵션이 상호 작용하고 CLASS_GRAPH = YES가 우선합니다. 그래서, 실제로, 원래 질문의 목적을 위해 내가 가진 것이 작동하지만 그럼에도 불구하고 좋은 캐치!
user6092647 jul.

또한 OUTPUT_DIRECTORY를 변경하고 RECURSIVE 검색을 허용 할 수 있습니다
King 's jester

또한 RECURSIVE파일을 YES
prehistoricpenguin

6

Enterprise Architect는 가져온 소스 코드에서 UML 다이어그램을 빌드합니다.


"더 쉽게이 작업을 수행 할 수있는 더 나은 도구가 있으면 알려주세요."라는 질문에 대한 답변도 찬성했습니다.
kaveish

5

doxys 파일을 편집하고 GENERATE_UML (그와 비슷한 것)을 true로 설정해야한다고 생각합니다. 그리고 dot / graphviz가 설치되어 있어야합니다.


12
UML_LOOK 옵션에 대해 이야기하고 있습니까?
David Doria

@DavidDoria가 있어야합니다. 그러나 UML_LOOK은 데이터 유형을 표시하지 않습니다.
Ruud Verhoef

2

가장 높은 2 개의 찬성 답변이 맞습니다. 오늘 부터 기본 설정에서 변경해야 할 유일한 것은 내장 생성기 대신 도트를 사용하여 생성을 활성화하는 것입니다.

몇 가지 중요한 참고 사항 :

  • Doxygen은 프로젝트의 모든 클래스에 대한 실제 전체 다이어그램을 생성하지 않습니다 . 각 계층에 대해 별도의 이미지를 생성합니다. 관련되지 않은 여러 클래스 계층이있는 경우 여러 이미지를 얻게됩니다.
  • 이 모든 다이어그램은 html/inherits.html또는 (웹 사이트 탐색에서) 클래스 => 클래스 계층 구조 => "텍스트 클래스 계층 구조로 이동"에서 찾을 수 있습니다 .
  • 이것은 C ++ 질문이므로 템플릿에 대해 이야기하겠습니다. 특히 T.
    • 각 템플릿 인스턴스화는 Doxygen에 의해 다른 유형으로 올바르게 간주됩니다. 다른 인스턴스에서 상속되는 유형은 다이어그램에서 다른 상위 클래스를 갖습니다.
    • 클래스 템플릿의 경우 foo에서 상속 TT템플릿 유형 매개 변수가 기본값이 같은 기본 가정됩니다. 기본값과 다른 곳 bar에서 상속되는 유형 이 있으면 부모가 있습니다. 그리고 공통의 부모가되지 않습니다.foo<U>Ubarfoo<U>foo<>bar<U>
    • 템플릿 매개 변수 중 하나 이상에서 상속하는 여러 클래스 템플릿이있는 경우, Doxygen은 템플릿 유형 매개 변수가 코드에서 정확히 동일한 이름을 갖는 한 이러한 클래스 템플릿에 대한 공통 부모를 가정합니다. 이는 이름 지정의 일관성에 대한 인센티브를 제공합니다.
    • CRTP 및 역 CRTP는 작동합니다.
    • 재귀 템플릿 상속 트리는 확장되지 않습니다. variant에서 상속하기 위해 모든 인스턴스화가 표시됩니다 variant<Ts...>.
    • 인스턴스화가없는 클래스 템플릿이 그려집니다. <...>기본값이없는 유형 및 비 유형 매개 변수를 나타내는 이름에 문자열 이 있습니다 .
    • 클래스 템플릿 전체 및 부분 전문화도 그려지고 있습니다. Doxygen은 전문화가 다른 유형에서 상속되는 경우 올바른 그래프를 생성합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.