2016년 11월 26일 토요일

Doxygen을 사용한 Source Code 문서화 방법.

Doxygen은 Source Code를 분석해서 특정한 형식의 주석을 이용해서 Source Code를 자동으로 문서화해주는 프로그램이다. 문서의 형식은 일반적으로 HTML이지만, LATEX난 PDF 파일로 만들어 낼수도 있다.
추가로, Graphviz 프로그램을 통해서 문서 내에 함수 다이어그램도 함께 작성할 수 있다.

Doxygen이 설치 완료되면, "Doxywizard"를 실행한다. 즉, Doxywizard에 의해서 Source Code에 기술된 특정한 형식의 주석을 문서화할 수 있다.

"error: Problems running dot: exit code=-1" 같은 메시지가 출력되는 경우 Graphviz 프로그램의 Path가 제대로 설정되지 않았기 때문이다. Doxywizard에 "Diagrams" wizard가 "Use dot tool from the GraphViz package"로 선언되고, "Expert"탭에 "Dot" Topics에서 "DOT_PATH"가 GraphViz가 설치된 bin 폴더를 기술해야 한다.


project내에서 source가 하위 폴더에 있는 경우에는 반드시, "Scan recursively"를 check해야만 한다.


CHM 파일을 생성하기 위해서는 먼저, HTML Help Workshop and Documentation에서  CHM 파일을 생성하는 Tool을 download 받아서 설치해야 한다.
설치가 완료되었다면, Doxywizard에 실행 파일의 Path를 등록해야 한다.

즉, Doxywizard의 "Export" 탭에서 "HTML" Topics를 선택하고, "HHC_LOCATION"에 앞서 설치한 hhc.exe의 Path를 추가한다. "CHM_FILE"을 따로 지정하지 않으면, "index.chm"파일이 생성된다.
Doxywizard의 "Output" Topics에서 "with search function"은 해제되어 있어야하고, "prepare for compressed HTML(.chm)"은 체크 되어야 한다.



  1. 사용법.
  2. 특정 형식의 주석
    @author - 파일 작성자를 쓴다.
    @brief - 파일에 대한 간략한 설명을 쓴다.
    @code - 중요 코드를 설명할 때 Code의 시작 지점을 설정한다.
    @date - 파일 작성 날짜를 쓴다.
    @endcode - 중요 코드를 설명할 때 종료 지점을 설정한다.
    @exception - 예외처리를 쓴다.
    @file - 파일의 이름을 쓴다.
    @fn - 함수를 나타낼 때 쓴다.
    @param - 함수 파라미터를 표시한다.
    @remark - 자세한 설명을 할 때 쓴다.
    @return - 함수의 리턴 값을 나타낼 때 쓴다.
    @see - 참조할 함수나 페이지를 지정할 때 쓴다.
    @bug -
    @mainpage -
    @section -
    @todo - 

  1. 자주 사용되는 형식.
    1. 파일에 사용되는 예.
      @author 나다(nada@gmail.com)
      @file MainFunction.c
      @date 2016/11/27
      @version 1.0.0
      @brief 메인 프로그램이 있는 파일.
    2. 함수에 사용되는 형식.
      @fn int add(int a, int b)
      @brief addtion function
      @date 2016/11/27
      @author 너냐(nunya@gmail.com)
      @param a 정수형 변수
      @param b 정수형 변수
      @return 더해진 값을 리턴
      @exception
      @remark 이 함수는 정수형 덧셈을 해주는 함수
    3. 전역 변수에 사용되는 형식.
    4. 지역 변수에 사용되는 형식.
    5. define 문에 사용되는 형식.
      #define MAXSIZE   1024       /** @def MAXSIZE 초대 크기 */
    6. typedef에 사용되는 형식.
    7. 구조체에 사용되는 형식.
      /**
       * @struct Info
       * @brief 정보를 위한 구조체
       */
      struct Info {
          int a;       /** @var int a 변수 1 */
          int b;       /** @var int b 변수 2 */
      }
  2. 한글 깨지는 현상은 아래와 같이 해결한다.
    "Export"탭의 "Project" 항목에서 "DOXYFILE_ENCODING"에 "EUC-KR"로 설정하고, "OUTPUT_LANGUAGE"에 "Korean-en"을 선택한다.

    "Export"탭의 "Input"항목에서 "INPUT_ENCODING"에 "CP949"로 수정한다.

    한글에 대한 인코딩은 EUC-KR, CP949, ISO-2022-KR, JOHAB등이 있다.

댓글 없음:

댓글 쓰기