{{위키데이터 속성 추적}}
{{소프트웨어 정보
| name                   = Doxygen
| title                  = 
| logo                   = doxygen.png
| screenshot             = 
| caption                = 
| collapsible            = 
| author                 = 
| developer              = Dimitri van Heesch
| released               = {{시작 날짜와 나이|1997|10|26|df=yes}}<ref>[http://lists.trolltech.com/qt-interest/1997-10/thread00297-0.html ANNOUNCE: doxygen 0.1] {{webarchive
 | url  = https://web.archive.org/web/20111004073015/http://lists.trolltech.com/qt-interest/1997-10/thread00297-0.html
 | date = October 4, 2011}}, ''Announcing: the first release of Doxygen, a C++ documentation system.'' , From: Dimitri van Heesch, Date: Sun, 26 Oct 1997, Qt-interest Archive</ref>
| discontinued           = 
| latest release version = 1.9.3<ref>{{웹 인용|url=https://www.doxygen.nl/manual/changelog.html|title=Doxygen Manual: Changelog|website=www.doxygen.nl}}</ref>
| latest release date = {{시작 날짜와 나이|2021|01|08|df=yes}}
| latest preview version = 
| latest preview date    = 
| programming language   = [[C++]]
| operating system       = [[크로스 플랫폼]]
| platform               = 
| size                   = 
| language               = 
| genre                  = [[도큐멘테이션 생성기]]
| license                = [[GNU 일반 공중 사용 허가서|GNU GPLv2]]
| website                = {{URL|http://www.doxygen.nl/}}
}}

'''Doxygen'''({{IPAc-en|ˈ|d|ɒ|k|s|i|dʒ|ən}} {{respell|DOK|see-jən}})<ref>[http://www.doxygen.nl/manual/faq.html#faq_name FAQ: How did doxygen get its name?]</ref>은 [[도큐멘테이션 생성기]]이자<ref>{{웹 인용|url=https://www.the-scientist.com/?articles.view/articleNo/43632/title/Get-With-the-Program/ |title=Get With the Program: DIY tips for adding coding to your analysis arsenal |website=[[:en:The Scientist (magazine)|The Scientist]] |type=[[:en:Trade magazine|Journal]] |date=2015-11-22 |last=Perkel |first=Jeffrey M. |publisher=The Scientist}}</ref><ref>{{웹 인용|url=http://foss.unh.edu/resources/index.php/Doxygen |title=Doxygen |website=OpenComputing |type=[[위키]] |date=2015-11-22 |last=Sabin |first=Mihaela |publisher=University of New Hampshire |url-status=dead |archiveurl=https://web.archive.org/web/20151123030546/http://foss.unh.edu/resources/index.php/Doxygen |archivedate=2015-11-23 }}</ref><ref>{{웹 인용|url=https://directory.fsf.org/wiki/Doxygen |title=Doxygen |website=Free Software Directory |type=[[위키]] |date=2015-11-22}}</ref><ref>{{웹 인용|url=https://rosettacode.org/wiki/Documentation |title=Documentation |website=[[:en:Rosetta Code]] |type=[[위키]] |date=2015-11-22}}</ref> 소프트웨어 참조 설명문을 작성하기 위한 도구이다. 여기서 설명문은 코드 내에 작성되므로 상대적으로 최신화 상태를 유지하기가 용이한 편이다. Doxygen은 설명문과 코드를 상호 참조할 수 있으며 문서의 독자는 쉽게 실제 코드를 참조할 수 있다.

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


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

<syntaxhighlight lang="cpp">
/**
<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
*/
</syntaxhighlight>

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

<syntaxhighlight lang="cpp">
/**
 * <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
 */
</syntaxhighlight>

수많은 프로그래머들은 C 스타일 주석을 회피하며 그 대신 C++ 스타일 단일 라인 주석을 사용한다. Doxygen은 추가 슬래시로 주석 처리를 하는 것을 수용한다.
<syntaxhighlight lang="cpp">
/// <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
</syntaxhighlight>

다음은 [[C++]] 소스 파일이 어떻게 문서화되는지를 설명한다.
[[파일:Doxygen ouput.png|섬네일|출력이 HTML로 어떻게 표시되는지를 나타낸 스크린샷]]
<syntaxhighlight lang="cpp">

/**
 * @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
       }
};
</syntaxhighlight>

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

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

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

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

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

== 같이 보기 ==
{{위키공용분류}}
* [[정적 프로그램 분석]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{공식 웹사이트}}

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