목차
~~Title: 독시젠 A to Z~~
독시젠을 사용해서 코드에 문서를 남기는 방법을 정리한다.
잘 활용해서 문서 작성 압박에서 조금이라도 벗어나보자.
독시젠 기본 매뉴얼
- 독시젠 매뉴얼 링크 : http://www.doxygen.nl/manual (영문)
- 하단의 링크가 깨진 경우, 위 주소에서 다시 찾아보면 나옴
독시젠 사용한 샘플
- cpp 또는 유사 언어 (php)에서 써 먹을 수 있는 doxygen 실용 예제. 쓰려는데 막히면 이걸 보면 오케. 내가 아는 범위까지만 작성 되어 있다.
doxygen 주석 방식
주석 형식의 기본
내 손에 가장 익은 방식
///\독시젠키워드 /// 위의 키워드에 대한 이어지는 설명 또는, 여러 키워드를 입력해야 하는데 /// 를 타이핑 하기 귀찮은 경우 /*! \독시젠키워드 */ 또는, /*! @독시젠키워드 */
@로 시작되는 독시젠 키워드는 phpdoc에서 인식하므로 (다른 것도 인식하지만), 이쪽이 좀 더 범용이 아닐까 싶다.
이후에는 전부 @나 \를 사용해서 작성한다.
독시젠 키워드가 선언된 이후부터는
- 다음 독시젠 키워드가 나올때 까지
- 주석이 끝나는 완전히 전부 부분까지
이전에 선언된 독시젠 키워드에 해당 되는 설명으로 읽혀진다.
/*! * @breif * 여기부터는 '\\brief'에 대한 설명으로 모두 포함된다. * 줄을 끊어서 쓰더라도 한줄로 정리 된다. * @return 새로온 독시젠 키워드가 나왔으므로 이전 brief에 대한 읽기는 끝나게 되고 * return에 해당되는 주석으로 읽혀진다. */
Class에 대해서
///@brief 아래 클래스에 대한 설명 class TestClass { public: LONGLONG llSomeVal; ///< 롱롱 타입의 변수 int nSomeVal; ///< 인티져 타입의 변수 };
- 클래스 위에 적는 경우라면 이 키워드는 필요 없다.
- 변수에 대해서 설명을 추가할 때는, ///< 를 그대로 사용해야 변수 주석으로 인식한다.
///\class AbcdClass filename.h "inc\filename.h" ///\brief 뭐 소스 위에 적지 않는 경우 쓰는거지.
- \class 키워드는 클래스 위에 적지 않고 다른 위치에 적는 경우, 무엇을 위한 키워드인지 알려주기 위해서 적는다.
class, file, 함수에 대해서,
각각의 소스 바로 위에 쓰지 않고 다른 곳에 쓸 수도 있는데, 주석이 너무 많아져서 코드 보는 것이 힘들어지는 경우 주석 부분만 다른 곳으로 옮겨 독시젠 문서에 포함되게끔 할 수 있는 <color silver>쓸데없는</color> 기능.
멤버 변수에 주석 달기
class IamTheClass { int k; ///< 이건 멤버 변수야. 로컬 변수의 주석은 무시당한다. void int kkk() { int mm; ///< mm 이라는 로컬 변수야. 독시젠이 난 무시할거야. } }
기타
///\brief RootThree를 위해서 사용될 콜백 함수 typedef bool (__stdcall *CALLBACKFUNCTYPE)(IN RootThree*, IN void*);
함수를 위한 키워드
함수용 키워드들
/*!
* @brief 함수에 대한 설명. (한줄 이상) 다음 키워드가 나올때까지 '///' 다음의 문장을 brief의 문장으로 인식한다.
* @details 결과 모르지만, 추가 설명이 필요하면 사용하라는 키워드. (more)를 눌렀을때 보여줄 텍스트.
* @param[in] 파라미터 이름 파라미터 설명, [in]은 입력용 파라미터라는 뜻.
* @param[out] 파라미터 이름 파라미터 설명, [out]은 입력용 파라미터라는 뜻.
* @return 리턴값에 대한 설명, 리턴 값이 여럿이라 추가 설명이 필요하면 retval을 사용한다. '\returns'와 같다.
* @retval 리턴값 리턴 값에 대한 설명.
* @bug 알고 있는 버그에 대해서 적는다.
* @todo todo에 대해서 적는다.
* @warning 주의 사항에 대해서 적는다.
* @see '다른 파일 이름'을 적는다. 다른 곳을 참조하라고 할때 쓰는데.. 직접 써본적은 없어서.
*/
// 독시젠에서 확인한 예제 /*! * @brief 독시젠에서 함수 설명이 제대로 만들어지는지 확인하기 위한 함수. * @details 'more'를 누르면 보여지는 설명. * @param[in] aa 입력용 숫자값 * @param[in] bb 입력용 char 값 * @param[out] dd 출력용 버퍼 * @return 리턴용 값에 대한 설명 * @retval -1 실패 * @retval 0 성공 * @retval 1 성공+뭔가 더 * @bug 이 함수에서 가끔 뻗는데 아직 이유를 모른다. * @warning 이 함수에서 가끔 뻗는데 아직 이유를 모른다. * @see OUT_GRP_TEST * @ref page2 */ int DoxyFuncTest( int aa, char bb, char* dd );
기타
?? <color silver>이건, 왜 적을걸까????</color>
///@brief RootThree를 위해서 사용될 콜백 함수 typedef bool (__stdcall *CALLBACKFUNCTYPE)(IN RootThree*, IN void*);
예제 1
- 설명을 작성하기 전에 코드 예제
- 샘플 파일 (독시젠 설정 파일 포함) : 문서 맨 위에 있음.
코드에 설명용 주석이 많기 때문에 부담스러워 보이지만, 독시젠 결과를 보면 해볼만하다고 생각 할 것임.
아래의 예시 코드는, 아래 문서를 만들기 위한 주석 달기임
/*! * @file CppTest.cpp * C++ 문법과 DoxyGen 문법을 테스트하기 위한 코드 */ #include "stdafx.h" #include <iostream> #include <conio.h> ///< getch() 함수를 사용하기 위해서 포함되었다. using namespace std; //////////////////////////////////////////////////////////////////////////// /*! * @mainpage C++ & DoxyGen 문법 테스트 * C++과 독시젠 문법을테스트하기 위한 정보 * @section intro_sec Introduction * This is the introduction. * @section install_sec Installation * @subsection step1 Step 1: Opening the box */ //////////////////////////////////////////////////////////////////////////// ///@page page1 A documentation page ///@tableofcontents /// Leading text. ///@section sec An example section /// This page contains the subsections \ref subsection1 and \ref subsection2. /// For more info see page \ref page2. ///@subsection subsection1 The first subsection /// Text. ///@subsection subsection2 The second subsection /// More text. ///@defgroup ROOT_INIT Root* 클래스를 초기화 하는 함수들 /// ///@defgroup VIRTUAL_TEST virtual 기능을 테스트 하기 위한 함수들 /// ///@defgroup GLOBAL_FUNC 클래스에 속하지 않는 외부 함수들 /// ///@defgroup OUT_GRP_TEST 외부 그룹에 속하는 함수 테스트 /// //////////////////////////////////////////////////////////////////////////// /*! * @page page2 Another page * @Even more info. */ ///@static static int _varG = 0; ///< 스태틱 상태값 ///@brief 최상단 루트 클래스 ///@ingroup VIRTUAL_TEST class RootZero { public: ///@brief 소멸자 클래스로, 함수 이름을 출력하고 종료한다. virtual ~RootZero() { cout << __FUNCTION__ << endl; } ///@brief virtual 기능 확인용 테스트 함수. /// child 클래스에서만 사용하도록 virtual pure 로 선언된다. ///@ingroup ROOT_INIT virtual bool initHandler() = 0; }; ///@class RootOne ///@brief RootZero로 부터 상속된 테스트 클래스 2 ///@ingroup VIRTUAL_TEST class RootOne : public RootZero { public: RootOne() { cout << __FUNCTION__ << endl; } virtual ~RootOne() { cout << __FUNCTION__ << endl; } ///@brief virtual 기능 확인용 테스트 함수. 함수 이름을 출력하고 종료한다. ///@ingroup ROOT_INIT virtual bool initHandler() { cout << __FUNCTION__ << endl; return true; } int mnTest; ///< 테스트용 인티져값 }; ///@brief RootOne로 부터 상속된 테스트 클래스 3 ///@ingroup VIRTUAL_TEST class RootTwo : public RootOne { public: RootTwo() { cout << __FUNCTION__ << endl; } virtual ~RootTwo() { cout << __FUNCTION__ << endl; } ///@brief virtual 기능 확인용 테스트 함수. /// 부모 클래스의 같은 함수를 실행하고 그 뒤에 함수 이름을 출력하고 종료한다. ///@ingroup ROOT_INIT virtual bool initHandler() { if( ! __super::initHandler() ) return false; cout << __FUNCTION__ << endl; return true; } }; ///@brief RootTwo로 부터 상속된 테스트 클래스 4 ///@ingroup VIRTUAL_TEST class RootThree : public RootTwo { public: RootThree() { cout << __FUNCTION__ << endl; } virtual ~RootThree() { cout << __FUNCTION__ << endl; } ///@brief virtual 기능 확인용 테스트 함수. /// 부모 클래스의 같은 함수를 실행하고 그 뒤에 함수 이름을 출력하고 종료한다. ///@ingroup ROOT_INIT virtual bool initHandler() { if( ! __super::initHandler() ) return false; cout << __FUNCTION__ << endl; return true; } ///@ingroup OUT_GRP_TEST int Grp1() {} int Grp2() {} ///@defgroup DOXY_MEMBER_GROUP 독시젠 그룹핑 테스트 ///@{ void Grp3() {} void Grp4() {} ///@} int mnABC; ///< abc int 변수 int mnDEF; ///< a var in group OUT_GRP_TEST ///@brief 독시젠에서 함수 설명이 제대로 만들어지는지 확인하기 위한 함수. ///@details 'more'를 누르면 보여지는 설명. ///@param[in] aa 입력용 숫자값 ///@param[in] bb 입력용 char 값 ///@param[out] dd 출력용 버퍼 ///@return 리턴용 값에 대한 설명 ///@retval -1 실패 ///@retval 0 성공 ///@retval 1 성공+뭔가 더 ///@bug 이 함수에서 가끔 뻗는데 아직 이유를 모른다. ///@warning 이 함수에서 가끔 뻗는데 아직 이유를 모른다. ///@see OUT_GRP_TEST ///@ref page2 int DoxyFuncTest( int aa, char bb, char* dd ); /*! * @fn int DoxyFuncTest2( int aa, char bb, char* dd ) * @brief 독시젠에서 함수 설명이 제대로 만들어지는지 확인하기 위한 함수. * @details 'more'를 누르면 보여지는 설명. \\fn 은 함수 위에 주석을 달지 않을때 쓰는 기능. * @param[in] aa 입력용 숫자값 * @param[in] bb 입력용 char 값 * @param[out] dd 출력용 버퍼 * @return 리턴용 값에 대한 설명 * @retval -1 실패 * @retval 0 성공 * @retval 1 성공+뭔가 더 * @bug 이 함수에서 가끔 뻗는데 아직 이유를 모른다. * @warning 이 함수에서 가끔 뻗는데 아직 이유를 모른다. * @see OUT_GRP_TEST * @ref page2 * @example CppTest.cpp * 이 함수의 예제. * char _buf[100]; * DoxyFuncTest2( 1, 'a', _buf ); */ int DoxyFuncTest2( int aa, char bb, char* dd ); }; //////////////////////////////////////////////////////////////////////////// ///\brief Root계열 클래스를 생성한다. 그리고 리턴. ///\return RootZero* 타입으로 생성된 포인터를 리턴한다. RootZero* getRootClassPtr() { return new RootThree; } ///@brief 프로그램 시작 지점 ///@param[in] argc 실행시 넘겨지는 파라미터의 개숫 ///@param[in] argv 실행시 넘겨지는 파라미터 문자열 리스트 ///@return 프로그램의 실행 결과값. ///@warning 워닝 경고문 테스트 ///@ingroup GLOBAL_FUNC int _tmain(int argc, _TCHAR* argv[]) { RootZero* _ptr = getRootClassPtr(); _ptr->initHandler(); _getch(); delete _ptr; _getch(); return 0; }
예제 2
예제코드
doxygen 키워드와 ms-xml로 작성된 클래스 설명 부분.
여러가지 재미 있는 키워드가 활용 되었다. 결과 화면은 더 아래쪽에.
/// <summary> /// 로그를 출력할 윈도우를 만든다.<br/> /// log() 와 watchValue() 를 실행할때 init() 함수를 호출해서 로그 파일과 GameObject 를 만든다. /// </summary> /// /// <example> /// 스태틱 객체가 아니므로, 어느 오브젝트엔가는 붙여서 사용해야 한다. /// 그 후에는 static으로 정의된 몇 함수를 사용해서 로그를 남기면 된다. /// /// @code{.cs} /// Console.log( "일반 로그" ); // 콘솔버퍼, 파일에 메시지를 남기고, Debug.Log()는 옵션 플래그에 따라 넣는다. /// Console.debug( "디버그용 로그" ); // Debug.Log()에도 메시지를 출력한다. Debug.Log() 메시지를 한번에 빼기 위한 용도로 만들었다. /// @endcode /// /// 이외에도 변수 와치 기능을 사용해서, 어떤 값이 어떻게 변해가는지 화면의 어느 고정된 위치에 표시한다.<br/> /// 값이 추가되는대로 자동으로 늘어나서 표시된다. /// /// @code{.cs} /// Console.watchValue( "변수 또는 키이름", 값 ); /// @endcode /// </example> /// /// <remarks> /// <para>코딩 가이드</para> /// /// <list type="bullet"> /// <item><description> /// GUI 스크립트 가이드 : http://docs.unity3d.com/Documentation/Components/GUIScriptingGuide.html /// </description></item> /// <item><description> /// GUI 레이아웃모드 : http://docs.unity3d.com/Documentation/Components/gui-Layout.html /// </description></item> /// </list> /// /// <para>사용한 함수 레퍼런스</para> /// <list type="bullet"> /// <item><description> /// GUILayout : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.html /// </description></item> /// <item><description> /// GUILayout.Window() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.Window.html /// </description></item> /// <item><description> /// GUILayout.Box() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.Box.html /// </description></item> /// <item><description> /// GUILayout.BeginScrollView() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.BeginScrollView.html /// </description></item> /// <item><description> /// GUI Controls : http://docs.unity3d.com/Documentation/Components/gui-Controls.html /// </description></item> /// </list> /// </remarks> /// @todo 텍스트 입력필드도 넣어서 입력을 받아서 대응 되도록 하는 것. public class Console : MonoBehaviour { }
만들어진 샘플
기타
- javadoc에서 인식되는 스타일로 주석 달기 javadoc 스타일로 주석 달기
Page 와 Section
- Page 를 만들고 다른 페이지와 연결 되도록 링크 구성
- 각 페이지는 섹션과 서브 섹션으로 구성
- 최종 tableofcontents 키워드로 최종 챕터 정리 가능
- 아래 Markdown 과 함께 사용 되어, 코드 문서화이외의 문서 작업이 가능<color silver>할걸??</color>
갈수록 링크가 늘어나는 독시젠 문서화 설명 : php 마크업
PAGE, SUBPAGE
- mainpage : 최초로 보여지는 페이지 설정
- subpage : 이동할 다른 페이지의 링크 설정
// 아래 내용이 모두 한 파일에 있어도, 각 다른 페이지를 만들어준다. /*! @mainpage I am THE Main 이 문서의 다른 페이지에 대해서 - @subpage intro - @subpage advanced */ /*! @page intro 일반사용 일반 사용에 대한 문서 */ /*! @page advanced "고급사용" 일반 사용에 대한 문서 */
Section, SubSection
이런 관계인 것은 알겠는데
- Section
- subsection
- subsection
#, ##, ##로 사용되는 헤더1, 헤더2, 헤더3 같은거랑 무슨 차이가 나는지 잘 모름.
<color red>section, subsection은 파라미터가 2개 사용하는 것 주의</color>
- @section <section-ref-name> <section-text>
- @subsection <section-ref-name> <section-text>
/*!
@section first_section 첫번째 섹션
첫번째 섹션 내용
@subsection first_sec_sec1 첫 섹션의 서브 섹션
첫번째 서브 섹션
@subsection first_sec_sec2 첫 섹션의 두번째 서브 섹션
두번째 서브 섹션
*/
tableofcontents
아직은..
예제
Markdown : 추가 문서 작업
코드에 설명을 추가하는 것만으로는 문서화가 부족한데, 추가 설명을 위키를 작성하는 것처럼 쓸 수 있는 Markdown 키워드가 지원된다.
- 과거의 링크들 : Doxygen Markdown
단락 구분
한줄 비워두는 것으로 단락과 단락을 구분
첫번째 단락입니다. 두번째 단락입니다. 단락이 새로 시작됩니다.
헤더(목차)
첫번째 두번째 목차까지 지원.
첫번째 헤더 =========== 두번째 헤더 -----------
- 헤더 키워드는 스트링 길이만큼 필요하지 않고, 2개 이상이면 됩니다.
1~6까지 지원하는 키워드도 있는데 # 키워드를 씁니다.
# 첫번째 헤더 ### 3번째 헤더
인용문
> 인용문의 시작. > spanning multiple lines
뭔가 하나 더 있는데, 이해 안됨.
리스트(목록)
- 단순히, +, -, * 로 시작되면 목록 형식으로 변환됨
- 더 하위 리스트는 탭으로 인덴트 해주면 하위 항목으로 인식됩니다.
- Item 1 More text for this item. - Item 2 + nested list item. + another nested item. - Item 3
숫자형 리스트를 사용할 수도 있다. 숫자를 그대로 쓰라
1. First item. 2. Second item.
코드
코드는 단락을 구분 지은 다음, 공백 4칸을 사용하면 만들 수 있다.
This a normal paragraph This is a code block We continue with a normal paragraph again.
또는
1. List item Not an indented code block, but a second paragraph in the list item ~~~~{.cs} This is a code block, fenced-style ~~~~
간단한 코드 추가
(`) 키워드로 간단한 코드 효과를 넣을 수 있다.
Use the `printf()` function.
테이블
기본
First Header | Second Header ------------- | ------------- Content Cell | Content Cell Content Cell | Content Cell
셀 내부 정렬
| Right | Center | Left | | ----: | :----: | :---- | | 10 | 10 | 10 | | 1000 | 1000 | 1000 |
DoxyWizard
직접 doxygen을 쓰는 것보다는 doxywizard로 옵션을 수정하는게 덜 피곤한 것 같다.
PRE.PROCESSOR
프로그램 메뉴 상의 위치 Expert > Preprocessor ( 독시젠 PreProcessing 부분)
ENABLE_PREPROCESSING 옵션을 켜야, PreProcessor를 인식하는데 이 지시문 때문에 파일 전체가 문서화 되지 않을 수도 있어서 주의가 필요
- ENABLE_PREPORCESSING : check! 적용하고 싶다면,
#if some_define과 같이 Preprocessor를 사용했는데 문서화가 되지 않는다면
- PREDEFINED 섹션에 사용하려는 지시문을 (적당히) 넣는다.
- 더 나이스한 방법은 모르겠고, 일단 이 방법으로 문서화가 된다.
Unity3D (C#)를 위한 설정
++++ Doxygen Config 펼치기 |
- doxygenConfigSample.txt
# Doxyfile 1.8.5 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = "One Two BOOM" PROJECT_NUMBER = PROJECT_BRIEF = PROJECT_LOGO = OUTPUT_DIRECTORY = ../doxygen CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = Korean-en BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = YES INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = YES INHERIT_DOCS = YES SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 4 ALIASES = TCL_SUBST = OPTIMIZE_OUTPUT_FOR_C = NO OPTIMIZE_OUTPUT_JAVA = NO OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO EXTENSION_MAPPING = MARKDOWN_SUPPORT = YES AUTOLINK_SUPPORT = YES BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO SIP_SUPPORT = NO IDL_PROPERTY_SUPPORT = YES DISTRIBUTE_GROUP_DOC = YES SUBGROUPING = YES INLINE_GROUPED_CLASSES = YES INLINE_SIMPLE_STRUCTS = YES TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = YES EXTRACT_PACKAGE = YES EXTRACT_STATIC = YES EXTRACT_LOCAL_CLASSES = YES EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = YES HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = YES CASE_SENSE_NAMES = NO HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES FORCE_LOCAL_INCLUDES = NO INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_MEMBERS_CTORS_1ST = NO SORT_GROUP_NAMES = NO SORT_BY_SCOPE_NAME = NO STRICT_PROTO_MATCHING = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_FILES = YES SHOW_NAMESPACES = YES FILE_VERSION_FILTER = LAYOUT_FILE = CITE_BIB_FILES = #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = NO WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files #--------------------------------------------------------------------------- INPUT = Assets/AppOTBoom \ Assets/KIHelper INPUT_ENCODING = UTF-8 FILE_PATTERNS = *.c \ *.cc \ *.cxx \ *.cpp \ *.c++ \ *.d \ *.java \ *.ii \ *.ixx \ *.ipp \ *.i++ \ *.inl \ *.h \ *.hh \ *.hxx \ *.hpp \ *.h++ \ *.idl \ *.odl \ *.cs \ *.php \ *.php3 \ *.inc \ *.m \ *.markdown \ *.md \ *.mm \ *.dox \ *.py \ *.f90 \ *.f \ *.for \ *.vhd \ *.vhdl \ *.b \ *.cs RECURSIVE = YES EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXCLUDE_SYMBOLS = EXAMPLE_PATH = . EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = YES REFERENCES_LINK_SOURCE = YES SOURCE_TOOLTIPS = YES USE_HTAGS = NO VERBATIM_HEADERS = YES CLANG_ASSISTED_PARSING = NO CLANG_OPTIONS = #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = YES COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 HTML_TIMESTAMP = YES HTML_DYNAMIC_SECTIONS = NO HTML_INDEX_NUM_ENTRIES = 100 GENERATE_DOCSET = NO DOCSET_FEEDNAME = "Doxygen generated docs" DOCSET_BUNDLE_ID = org.doxygen.Project DOCSET_PUBLISHER_ID = org.doxygen.Publisher DOCSET_PUBLISHER_NAME = Publisher GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO CHM_INDEX_ENCODING = BINARY_TOC = NO TOC_EXPAND = NO GENERATE_QHP = NO QCH_FILE = QHP_NAMESPACE = org.doxygen.Project QHP_VIRTUAL_FOLDER = doc QHP_CUST_FILTER_NAME = QHP_CUST_FILTER_ATTRS = QHP_SECT_FILTER_ATTRS = QHG_LOCATION = GENERATE_ECLIPSEHELP = NO ECLIPSE_DOC_ID = org.doxygen.Project DISABLE_INDEX = NO GENERATE_TREEVIEW = NO ENUM_VALUES_PER_LINE = 4 TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES USE_MATHJAX = NO MATHJAX_FORMAT = HTML-CSS MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest MATHJAX_EXTENSIONS = MATHJAX_CODEFILE = SEARCHENGINE = YES SERVER_BASED_SEARCH = NO EXTERNAL_SEARCH = NO SEARCHENGINE_URL = SEARCHDATA_FILE = searchdata.xml EXTERNAL_SEARCH_ID = EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4 EXTRA_PACKAGES = LATEX_HEADER = LATEX_FOOTER = LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES USE_PDFLATEX = YES LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO LATEX_SOURCE_CODE = NO LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = NO MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- GENERATE_DOCBOOK = NO DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = YES SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = UNITY_EDITOR EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = YES MSCGEN_PATH = HIDE_UNDOC_RELATIONS = YES HAVE_DOT = YES DOT_NUM_THREADS = 0 DOT_FONTNAME = Helvetica DOT_FONTSIZE = 10 DOT_FONTPATH = CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO UML_LIMIT_NUM_FIELDS = 10 TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = YES CALLER_GRAPH = YES GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png INTERACTIVE_SVG = NO DOT_PATH = DOTFILE_DIRS = MSCFILE_DIRS = DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES
++++
그래프 표시 : Graphviz
- 다운로드링크 : http://www.graphviz.org/download/
윈도우라면 설치 버젼이 제공되므로, 뭐 걍 설치하면 끝.
키워드 (c comment style)
주석은 javadoc 스타일로 작성해도 인식 하므로, 일단 패스 doxygen이 인식하는 키워드 정리 ; 인터넷에 널려 있다.
- 간단하게는 ///이게 제일 편할 듯
- 복수의 키워드를 사용하려면 /*! ~ */ 와 같은 것을 쓴다.
/*! * @brief 설명, * @brief (공백)여러줄 작성시에는 공백을 추가해서 적는다. 불편하네.. * @file 파일명 * @return * @author * @date 작성날짜 * @param 파라미터 * @see 참고할 함수나 페이지 * @todo 다음에 할일 * @bug * @code 코드로 쓰는 설명 부분 시작 * @code 코드 부분 종료 */
독시젠 웹 레퍼런스
- 독시젠의 키워드 : !!
제대로 사용하려면 가기 싫어도 자주 가게 되는데...
MS XML Documentation Comment
C#으로 작성할때는 MS 스타일이 자동 입력 되니, 사용할 수 있는 것을 정리한다. 귀찮지만, 한번 정리해보자.
- MS는 xml 형식으로 주석 문서화가 가능하다.
- /// 로 시작되는 부분이 문서화가 되어지는 부분.
///
- <키워드> ~ </키워드> : 의 형식으로 문서화 가능.
/// <summary> 함수에 대한 설명 /// </summary>
- 이 <summary></summary> 키워드는 한줄에 다 같이 사용 되면 인식 되지 않는다.
/// <summary> 주석 </summary> <-- 이렇게 쓰면 인식되지 않아요.
<키워드> 내부에 <, >를 써야 하는 경우에는 html 처럼 <와 >를 사용한다.
/// <summary cref="C < T >"> /// </summary>
주석 혼합 사용
/// <summary> /// 새게임을 시작한다. /// AppFlowHandler 에서 호출 되어서 게임을 시작된다. 보드를 초기화 하고, /// 뷰에 메시지를 보낸다. /// </summary> /// <param name="startParam">시작할 때 필요한 정수 옵션을 받아둔다.</param> /*! * @param secParam 두번째 파라미터에 대해서 입력한다. */
링크
키워드
작성하다보면 자동으로 사용할 키워드를 보여주기 때문에 일단은 필요 없지만.. 그래도 정리해두는 편이 찾기 편할 테니.
<c> | 코드를 가리킨다. 한줄 이상은 <code>를 사용한다. |
<code> | 한줄 이상의 코드 |
cref | 코드레퍼런스를 가리킨다. <see cref="TestClass"/> 처럼 사용. |
<para> | <summary>, <remarks> 또는 <returns> 같은 태그 내에서 사용하여 텍스트에 구문을 추가할 수 있다. |
단락을 추가할때는 이 태그를 써야 한다는 귀찮은 태그다. | |
<see> | cref와 같이 사용해서, 어덴가의 코드를 가리킨다. |
<param> | 말그대로 파라미터 |
<seealso> | 문서화하려는 대상 파일들에 있는 멤버 함수, 멤버 변수와 같은 필드에 대한 참조를 만든다. |
출력 XML에서 member를 요소 이름에 전달하는지 확인합니다. member는 큰따옴표(“ ”)로 묶어야 합니다. | |
텍스트 내부에서 링크를 지정하려면 <see>를 사용합니다. ←- 무슨뜻? | |
<see> | <seealso>와 같은데 뭐가 다르지? |
<example> | 링크 |
<paramref> | |
<summary> | 함수에 대한 설명 |
<exception> | 예외 처리에 대해서 기록. link |
<permission> | |
<typeparam> | |
<include> | 함수 설명이 다른 파일에 있는 경우, 이 지시문으로 해당 파일을 기록한다. |
<remarks> | 링크 |
<summary>에 대한 보충설명을 추가한다. 아마 표시하는 위치가 다른 모양. | |
<typeparamref> | 링크 |
<list> | 아래쪽 참조 |
<returns> | 함수 리턴 값에 대해서 추가 설명 |
<value> | 좀 이상하지만, get/set으로 설정하는 프로퍼티에 대해서 주석을 넣는다. |
<list>에 대한 예제
<list type="bullet" | "number" | "table"> <listheader> <term>term</term> <description>description</description> </listheader> <item> <term>term</term> <description>description</description> </item> </list>
TAG
doxygen 독시젠
덧글 피드백
~~DISQUS kieuns~~