Doxygen ( ) is a documentation generator and static analysis tool for software source trees. When used as a documentation generator, Doxygen extracts information from specially-formatted comments within the code. When used for analysis, Doxygen uses its parse tree to generate diagrams and charts of the code structure. Doxygen can cross reference documentation and code, so that the reader of a document can easily refer to the actual code.

Doxygen is free software, released under the terms of the GNU General Public License version2 (GPLv2).

Design 

Like Javadoc, Doxygen extracts documentation from source file comments. In addition to the Javadoc syntax, Doxygen supports the documentation tags used in the Qt toolkit and can generate output in HyperText Markup Language (HTML) as well as in Microsoft Compiled HTML Help (CHM), Rich Text Format (RTF), Portable Document Format (PDF), LaTeX, PostScript or man pages.

Uses 

Programming languages supported by Doxygen include C, C++, C#, D, Fortran, IDL, Java, Objective-C, Perl, PHP, Python, and VHDL. Other languages can be supported with additional code.

Doxygen runs on most Unix-like systems, macOS, and Windows.

The first version of Doxygen borrowed code from an early version of DOC++, developed by Roland Wunderling and Malte Zöckler at Zuse Institute Berlin. Later, the Doxygen code was rewritten by Dimitri van Heesch.

Doxygen has built-in support to generate inheritance diagrams for C++ classes. For more advanced diagrams and graphs, Doxygen can use the "dot" tool from Graphviz.

Example code 

The generic syntax of documentation comments is to start a comment with an extra asterisk after the leading comment delimiter '/*':

/**
<A short one line description>

<Longer description>
<May span multiple lines or paragraphs as needed>

@param  Description of method's or function's input parameter
@param  ...
@return Description of the return value
*/

Many programmers like to mark the start of each line with space-asterisk-space, as follows, but that is not necessary.

/**
 * <A short one line description>
 *
 * <Longer description>
 * <May span multiple lines or paragraphs as needed>
 *
 * @param  Description of method's or function's input parameter
 * @param  ...
 * @return Description of the return value
 */

Many programmers avoid using C-style comments and instead use C++ style single line comments. Doxygen accepts comments with additional slash as Doxygen comments.
/// <A short one line description>
///
/// <Longer description>
/// <May span multiple lines or paragraphs as needed>
///
/// @param  Description of method's or function's input parameter
/// @param  ...
/// @return Description of the return value
 
The following illustrates how a C++ source file can be documented.

/**
 * @file
 * @author  John Doe <jdoe@example.com>
 * @version 1.0
 *
 * @section LICENSE
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details at
 * https://www.gnu.org/copyleft/gpl.html
 *
 * @section DESCRIPTION
 *
 * The time class represents a moment of time.
 */

class Time {

    public:

       /**
        * Constructor that sets the time to a given value.
        *
        * @param timemillis is a number of milliseconds
        *        passed since Jan 1, 1970.
        */
       Time (int timemillis) {
           // the code
       }

       /**
        * Get the current time.
        *
        * @return A time object set to the current time.
        */
       static Time now () {
           // the code
       }
};

An alternative approach for documenting parameters is shown below. It will produce the same documentation.

       /**
        * Constructor that sets the time to a given value.
        */
       Time (int timemillis ///< Number of milliseconds passed since Jan 1, 1970.>
            )
       {
           // the code
       }

Richer markup is also possible.  For instance, add equations using LaTeX commands:

/**
 *
 * An inline equation @f$ e^{\pi i}+1 = 0 @f$
 *
 * A displayed equation: @f[ e^{\pi i}+1 = 0 @f]
 *
 */

Doxygen source and development 

The Doxygen sources are currently hosted at GitHub, where the main developer, Dimitri van Heesch, contributes under the user name "doxygen". Doxygen is written in C++, and consists of around 300,000 source lines of code. For lexical analysis, the standard tool Lex (or its replacement Flex) is run via approximately 35,000 lines of lex script. The parsing tool Yacc (or its replacement Bison) is also used, but only for minor tasks; the bulk of language parsing is done by native C++ code. The build process is based on CMake and also involves some Python scripts.

See also 

 Comparison of documentation generators
 API Writer
 Static program analysis

References

External links 
 

Code navigation tools
Cross-platform software
Free computer programming tools
Free documentation generators
Free software programmed in C++
Online help
Software that uses Qt
Doxygen( )은 도큐멘테이션 생성기이자 소프트웨어 참조 설명문을 작성하기 위한 도구이다. 여기서 설명문은 코드 내에 작성되므로 상대적으로 최신화 상태를 유지하기가 용이한 편이다. Doxygen은 설명문과 코드를 상호 참조할 수 있으며 문서의 독자는 쉽게 실제 코드를 참조할 수 있다.

Doxygen은 GNU 일반 공중 사용 허가서 버전 2(GPLv2)로 배포되는 자유 소프트웨어이다.

예시 코드 
설명문의 주석의 일반 문법은 '/*'를 사용하는 것이다.

/**
<A short one line description>

<Longer description>
<May span multiple lines or paragraphs as needed>

@param  Description of method's or function's input parameter
@param  ...
@return Description of the return value
*/

수많은 프로그래머들은 각 줄의 시작을 공백-별표-공백으로 표기하는 것을 선호하지만 필수는 아니다.

/**
 * <A short one line description>
 *
 * <Longer description>
 * <May span multiple lines or paragraphs as needed>
 *
 * @param  Description of method's or function's input parameter
 * @param  ...
 * @return Description of the return value
 */

수많은 프로그래머들은 C 스타일 주석을 회피하며 그 대신 C++ 스타일 단일 라인 주석을 사용한다. Doxygen은 추가 슬래시로 주석 처리를 하는 것을 수용한다.
/// <A short one line description>
///
/// <Longer description>
/// <May span multiple lines or paragraphs as needed>
///
/// @param  Description of method's or function's input parameter
/// @param  ...
/// @return Description of the return value

다음은 C++ 소스 파일이 어떻게 문서화되는지를 설명한다.

/**
 * @file
 * @author  John Doe <jdoe@example.com>
 * @version 1.0
 *
 * @section LICENSE
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details at
 * https://www.gnu.org/copyleft/gpl.html
 *
 * @section DESCRIPTION
 *
 * The time class represents a moment of time.
 */

class Time {

    public:

       /**
        * Constructor that sets the time to a given value.
        *
        * @param timemillis is a number of milliseconds
        *        passed since Jan 1, 1970.
        */
       Time (int timemillis) {
           // the code
       }

       /**
        * Get the current time.
        *
        * @return A time object set to the current time.
        */
       static Time now () {
           // the code
       }
};

변수를 문서화하기 위한 또다른 접근법은 아래와 같다. 동일한 문서 내용을 출력한다.

       /**
        * Constructor that sets the time to a given value.
        */
       Time (int timemillis ///< Number of milliseconds passed since Jan 1, 1970.>
            )
       {
           // the code
       }

더 상위의 리치 마크업도 가능하다. LaTeX 명령을 이용한 예:

/**
 *
 * An inline equation @f$ e^{\pi i}+1 = 0 @f$
 *
 * A displayed equation: @f[ e^{\pi i}+1 = 0 @f]
 *
 */

Doxygen 소스와 개발 
Doxygen 소스는 현재 깃허브에서 호스팅되고 있으며 여기서 주 개발자 Dimitri van Heesch는 "doxygen"이라는 사용자 이름으로 기여하고 있다. Doxygen은 C++로 작성되었으며 300,000개 이상의 소스 라인으로 구성되어 있다. 낱말 분석의 경우 표준 도구 lex(또는 대안이 되는 Flex)는 35,000개의 lex 스크립트 줄로 동작한다. 구문 분석 도구 Yacc(또는 대안이 되는 Bison)도 사용되지만 사소한 작업에만 쓰이며 언어 구문 분석 중 상당 부분은 네이티브 C++ 코드로 수행된다. 빌드 프로세스는 CMake에 기반을 두며 일부 파이썬 스크립트를 수반한다.

같이 보기 

 정적 프로그램 분석

각주

외부 링크 
 

크로스 플랫폼 소프트웨어
자유 프로그래밍 도구
자유 문서 생성기
C++로 작성된 자유 소프트웨어
온라인 도움말
Qt를 사용하는 소프트웨어