~~Title: 독시젠 A to Z~~
독시젠을 사용해서 코드에 문서를 남기는 방법을 정리한다.
잘 활용해서 문서 작성 압박에서 조금이라도 벗어나보자.
{{htmlmetatags>metatag-robots=()
metatag-keywords=(독시젠, 독시젠 사용법,doxygen,doxygen howto)
metatag-description=(독시젠 사용법)
}}
====== 독시젠 기본 매뉴얼 ======
* 독시젠 매뉴얼 링크 : http://www.doxygen.nl/manual (영문)
* 하단의 링크가 깨진 경우, 위 주소에서 다시 찾아보면 나옴
===== 독시젠 사용한 샘플 =====
* cpp 또는 유사 언어 (php)에서 써 먹을 수 있는 doxygen 실용 예제. 쓰려는데 막히면 이걸 보면 오케. 내가 아는 범위까지만 작성 되어 있다.
* {{:tool:cpptest-20130606.zip}}
* [[http://kieuns.com/other/doxygen|CppTest의 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, 함수에 대해서,
각각의 소스 바로 위에 쓰지 않고 다른 곳에 쓸 수도 있는데, **주석이 너무 많아져서 코드 보는 것이 힘들어지는 경우** 주석 부분만 다른 곳으로 옮겨 독시젠 문서에 포함되게끔 할 수 있는 쓸데없는 기능.
==== 멤버 변수에 주석 달기 ====
class IamTheClass
{
int k; ///< 이건 멤버 변수야. 로컬 변수의 주석은 무시당한다.
void int kkk()
{
int mm; ///< mm 이라는 로컬 변수야. 독시젠이 난 무시할거야.
}
}
==== 기타 ====
///\brief RootThree를 위해서 사용될 콜백 함수
typedef bool (__stdcall *CALLBACKFUNCTYPE)(IN RootThree*, IN void*);
==== 함수를 위한 키워드 ====
* [[http://www.doxygen.nl/manual/commands.html|doxygen special commands]]
함수용 키워드들
/*!
* @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 );
===== 기타 =====
?? 이건, 왜 적을걸까????
///@brief RootThree를 위해서 사용될 콜백 함수
typedef bool (__stdcall *CALLBACKFUNCTYPE)(IN RootThree*, IN void*);
===== 예제 1 =====
* 설명을 작성하기 전에 코드 예제
* 샘플 파일 (독시젠 설정 파일 포함) : 문서 맨 위에 있음.
코드에 설명용 주석이 많기 때문에 부담스러워 보이지만, 독시젠 결과를 보면 해볼만하다고 생각 할 것임.
아래의 예시 코드는, 아래 문서를 만들기 위한 주석 달기임
* [[http://kieuns.com/other/doxygen/annotated.html|클래스 샘플]]
* [[http://kieuns.com/other/doxygen/class_root_three.html|클래스 RootThree 샘플]]
/*!
* @file CppTest.cpp
* C++ 문법과 DoxyGen 문법을 테스트하기 위한 코드
*/
#include "stdafx.h"
#include
#include ///< 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로 작성된 클래스 설명 부분.
여러가지 재미 있는 키워드가 활용 되었다. [[#만들어진_샘플|결과 화면은 더 아래쪽]]에.
///
/// 로그를 출력할 윈도우를 만든다.
/// log() 와 watchValue() 를 실행할때 init() 함수를 호출해서 로그 파일과 GameObject 를 만든다.
///
///
///
/// 스태틱 객체가 아니므로, 어느 오브젝트엔가는 붙여서 사용해야 한다.
/// 그 후에는 static으로 정의된 몇 함수를 사용해서 로그를 남기면 된다.
///
/// @code{.cs}
/// Console.log( "일반 로그" ); // 콘솔버퍼, 파일에 메시지를 남기고, Debug.Log()는 옵션 플래그에 따라 넣는다.
/// Console.debug( "디버그용 로그" ); // Debug.Log()에도 메시지를 출력한다. Debug.Log() 메시지를 한번에 빼기 위한 용도로 만들었다.
/// @endcode
///
/// 이외에도 변수 와치 기능을 사용해서, 어떤 값이 어떻게 변해가는지 화면의 어느 고정된 위치에 표시한다.
/// 값이 추가되는대로 자동으로 늘어나서 표시된다.
///
/// @code{.cs}
/// Console.watchValue( "변수 또는 키이름", 값 );
/// @endcode
///
///
///
/// 코딩 가이드
///
///
/// -
/// GUI 스크립트 가이드 : http://docs.unity3d.com/Documentation/Components/GUIScriptingGuide.html
///
/// -
/// GUI 레이아웃모드 : http://docs.unity3d.com/Documentation/Components/gui-Layout.html
///
///
///
/// 사용한 함수 레퍼런스
///
/// -
/// GUILayout : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.html
///
/// -
/// GUILayout.Window() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.Window.html
///
/// -
/// GUILayout.Box() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.Box.html
///
/// -
/// GUILayout.BeginScrollView() : http://docs.unity3d.com/Documentation/ScriptReference/GUILayout.BeginScrollView.html
///
/// -
/// GUI Controls : http://docs.unity3d.com/Documentation/Components/gui-Controls.html
///
///
///
/// @todo 텍스트 입력필드도 넣어서 입력을 받아서 대응 되도록 하는 것.
public class Console : MonoBehaviour
{
}
==== 만들어진 샘플 ====
[[#예제코드|위쪽 예제코드로 돌아가기]]
^ 위의 주석의 샘플 ^
| {{:tool:doxygen-console-sample-1.png}} |
===== 기타 =====
* [[language:java:javadoc]] javadoc 스타일로 주석 달기
====== Page 와 Section ======
* Page 를 만들고 다른 페이지와 연결 되도록 링크 구성
* 각 페이지는 섹션과 서브 섹션으로 구성
* 최종 tableofcontents 키워드로 최종 챕터 정리 가능
* 아래 Markdown 과 함께 사용 되어, 코드 문서화이외의 문서 작업이 가능할걸??
갈수록 링크가 늘어나는 독시젠 문서화 설명 : [[http://michelf.ca/projects/php-markdown/extra/#table|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 같은거랑 무슨 차이가 나는지 잘 모름.
section, subsection은 파라미터가 2개 사용하는 것 주의
* %%@section %%
* %%@subsection %%
/*!
@section first_section 첫번째 섹션
첫번째 섹션 내용
@subsection first_sec_sec1 첫 섹션의 서브 섹션
첫번째 서브 섹션
@subsection first_sec_sec2 첫 섹션의 두번째 서브 섹션
두번째 서브 섹션
*/
===== tableofcontents =====
아직은..
===== 예제 =====
|< 100% - - >|
| {{:tool:doxgen-markdown-test-1.png|}} |
/*!
@mainpage I am THE Main
이 문서의 다른 페이지에 대해서
- @subpage intro
- @subpage advanced
@section first_sec 섹션1
@subsection steam_subsec 실행 방법 (쓸게 없어서)
# 스팀 실행 방법
- 컴터를 켠다
- 윈도우즈에 들어간다.
- 스팀을 켠다.
## 스팀에서 게임 실행 방법
- 아 쓸게 없어서..
1. 스팀에서 목록을 확인한다.
2. 업데이트를 확인한다.
@subsection table_usage 테이블 추가 방법
첫째헤더 | 둘째헤
------------- | -------------
셀 내용 | Content Cell
() | Content Cell
셀 | 셀 6
내용이 비어있는 셀은 인식되지 않는다.
*/
/*!
@page intro 일반사용
일반 사용에 대한 문서
*/
/*!
@page advanced 고급사용
일반 사용에 대한 문서
*/
|
====== Markdown : 추가 문서 작업 ======
코드에 설명을 추가하는 것만으로는 문서화가 부족한데,
추가 설명을 위키를 작성하는 것처럼 쓸 수 있는 Markdown 키워드가 지원된다.
* [[http://michelf.ca/projects/php-markdown/extra/#table|php마크다운, 얘가 끝판왕인거 같음]]
* 과거의 링크들 : [[http://www.doxygen.nl/manual/markdown.html|Doxygen Markdown]]
* [[http://daringfireball.net/projects/markdown/basics|보다 근본적인 키워드 설명]]
===== 단락 구분 =====
한줄 비워두는 것으로 단락과 단락을 구분
첫번째 단락입니다.
두번째 단락입니다. 단락이 새로 시작됩니다.
===== 헤더(목차) =====
첫번째 두번째 목차까지 지원.
첫번째 헤더
===========
두번째 헤더
-----------
* 헤더 키워드는 스트링 길이만큼 필요하지 않고, **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.
* [[http://www.doxygen.nl/manual/markdown.html#mddox_lists|리스트 작성에 대한 상세정보는 여기]]
===== 코드 =====
코드는 단락을 구분 지은 다음, 공백 4칸을 사용하면 만들 수 있다.
This a normal paragraph
This is a code block
We continue with a normal paragraph again.
* [[http://www.doxygen.nl/manual/markdown.html#mddox_code_blocks|좀더 자세한 것은 여기]]
또는
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 ( [[http://www.doxygen.nl/manual/preprocessing.html|독시젠 PreProcessing 부분]])
**ENABLE_PREPROCESSING** 옵션을 켜야, PreProcessor를 인식하는데 **이 지시문 때문에 파일 전체가 문서화 되지 않을 수도 있어서 주의가 필요**
* ENABLE_PREPORCESSING : check! 적용하고 싶다면,
%%#if some_define%%과 같이 Preprocessor를 사용했는데 문서화가 되지 않는다면
* **PREDEFINED** 섹션에 사용하려는 지시문을 (적당히) 넣는다.
* 더 나이스한 방법은 모르겠고, 일단 이 방법으로 문서화가 된다.
===== Unity3D (C#)를 위한 설정 =====
++++ Doxygen Config 펼치기 |
# 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 코드 부분 종료
*/
====== 독시젠 웹 레퍼런스 ======
* [[http://www.doxygen.nl/manual/docblocks.html|코드의 주석 문서화]]
* [[http://www.doxygen.nl/manual/commands.html|독시젠의 키워드]] : !!
* [[http://www.doxygen.nl/manual/markdown.html|독시젠의 Markdown 문서화 기능]]
제대로 사용하려면 가기 싫어도 자주 가게 되는데...
====== MS XML Documentation Comment ======
C#으로 작성할때는 MS 스타일이 자동 입력 되니, 사용할 수 있는 것을 정리한다. 귀찮지만, 한번 정리해보자.
Doxygen도 MS 형식의 문서화를 지원하니까, 이쪽을 써도 안심
* MS는 xml 형식으로 주석 문서화가 가능하다.
* %%///%% 로 시작되는 부분이 문서화가 되어지는 부분.///
* %%<키워드>%% ~ %%키워드>%% : 의 형식으로 문서화 가능.
/// 함수에 대한 설명
///
* 이 **%%%%** 키워드는 한줄에 다 같이 사용 되면 인식 되지 않는다.
/// 주석 <-- 이렇게 쓰면 인식되지 않아요.
%%<키워드>%% 내부에 %%<, >%%를 써야 하는 경우에는 html 처럼 **%%<%%**와 **%%>%%**를 사용한다.
///
///
=====주석 혼합 사용=====
MS xml 태그로 주석을 추가한 다음, DoxyGen 형식으로 부족한 부분을 추가해도 인식 된다.
///
/// 새게임을 시작한다.
/// AppFlowHandler 에서 호출 되어서 게임을 시작된다. 보드를 초기화 하고,
/// 뷰에 메시지를 보낸다.
///
/// 시작할 때 필요한 정수 옵션을 받아둔다.
/*!
* @param secParam 두번째 파라미터에 대해서 입력한다.
*/
=====링크=====
* [[http://msdn.microsoft.com/ko-kr/library/5ast78ax.aspx|한글링크]]
* [[http://msdn.microsoft.com/en-us/library/5ast78ax.aspx|영문(최신)]]
* [[https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/xmldoc/|XML 문서 주석(C# 프로그래밍 가이드)]]
===== 키워드 =====
작성하다보면 자동으로 사용할 키워드를 보여주기 때문에 일단은 필요 없지만.. 그래도 정리해두는 편이 찾기 편할 테니.
* [[http://msdn.microsoft.com/en-us/library/5ast78ax.aspx|Recommended Tags for Documentation Comments]]
| %%%% | 코드를 가리킨다. 한줄 이상은 %%%%를 사용한다. |
| %%%% | 한줄 이상의 코드 |
| cref | **코드레퍼런스**를 가리킨다. %%%% 처럼 사용. |
| %%%% | %%, %% 또는 %%%% 같은 태그 내에서 사용하여 텍스트에 구문을 추가할 수 있다. |
| ::: | 단락을 추가할때는 이 태그를 써야 한다는 귀찮은 태그다. |
| %%%% | cref와 같이 사용해서, 어덴가의 코드를 가리킨다. |
| %%%% | 말그대로 파라미터 |
| %%%% | 문서화하려는 대상 파일들에 있는 멤버 함수, 멤버 변수와 같은 필드에 대한 참조를 만든다. |
| | 출력 XML에서 member를 요소 이름에 전달하는지 확인합니다. member는 큰따옴표(" ")로 묶어야 합니다. |
| | 텍스트 내부에서 링크를 지정하려면 %%%%를 사용합니다. <-- 무슨뜻? |
| %%%% | %%%%와 같은데 뭐가 다르지? |
| %%%% | [[http://msdn.microsoft.com/ko-kr/library/9w4cf933.aspx|링크]] |
| %%%% | |
| %%%% | 함수에 대한 설명 |
| %%%% | 예외 처리에 대해서 기록. [[http://msdn.microsoft.com/en-us/library/w1htk11d.aspx|link]] |
| %%%% | |
| %%%% | |
| %%%% | 함수 설명이 다른 파일에 있는 경우, 이 지시문으로 해당 파일을 기록한다. |
| %%%% | [[http://msdn.microsoft.com/ko-kr/library/3zw4z1ys.aspx|링크]] |
| | %%%%에 대한 보충설명을 추가한다. 아마 표시하는 위치가 다른 모양. |
| %%%% | [[http://msdn.microsoft.com/en-us/library/ms173192.aspx|링크]] |
| %%%% | 아래쪽 참조 |
| %%%% | 함수 리턴 값에 대해서 추가 설명 |
| %%%% | 좀 이상하지만, get/set으로 설정하는 프로퍼티에 대해서 주석을 넣는다. |
===== 에 대한 예제 =====
term
description
-
term
description
====== TAG ======
{{tag> doxygen 독시젠}}
====== 덧글 피드백 ======
~~DISQUS kieuns~~