Doxygen
Doxygen — генератор документации[1][2][3][4][5], предназначенный для различных языков программирования.
Doxygen извлекает информацию из специальных комментариев в исходном коде и сохраняет её в одном из поддерживаемых форматов.
Программа поддерживает статический анализ кода, используя синтаксическое дерево для генерации диаграмм и графиков структуры программы. Через механизм перекрёстных ссылок можно быстро перейти от документации к соответствующему участку исходного кода.
Doxygen можно использовать с разными языками программирования, включая C[6], C++, C#, D, Fortran, IDL, Java, Objective-C[7], Perl[8], PHP[9], Python[10][11] и VHDL[9]. Doxygen может работать в средах Unix-подобных систем, macOS и Windows. Программа распространяется как свободное программное обеспечение по лицензии GNU GPL версии 2.
Последний релиз программы выпущен 30 апреля 2026 года под номером 1.17.0.
Общие сведения
| Doxygen | |
|---|---|
| Тип | генератор документации |
| Разработчик | Dimitri van Heesch |
| Написана на | C++ |
| Интерфейс | Qt |
| Операционная система | мультиплатформенное ПО |
| Первый выпуск | 26 октября 1997 |
| Последняя версия | preferred (preferred) |
| Репозиторий | github.com/doxygen/doxyg… |
| Лицензия | GPLv2 |
| Сайт | doxygen.nl/index.html |
История
Первая версия Doxygen заимствовала часть исходного кода из ранней версии DOC++, разработанной Роландом Вундерлингом и Мальте Цёклером из Института Зузе в Берлине. Позже Doxygen был переписан Димитри ван Хисом[12].
Разработка
Исходный код Doxygen размещён на платформе GitHub, где основной разработчик Димитри ван Хис работает под именем «doxygen»[13]. Doxygen написан на C++ и содержит около 300 тысяч строк исходного кода. Для лексического анализа используется Lex (или его замена Flex), запускаемый через примерно 35 тысяч строк скрипта. Инструмент синтаксического анализа Yacc (или Bison) также применяется, но только для вспомогательных задач. Основная обработка синтаксиса реализована на родном C++ коде. В качестве системы сборки используются CMake и скрипты на Python.
Архитектура и возможности
Подобно другим генераторам документации, например Javadoc, Doxygen извлекает информацию как из комментариев, так и из самостоятельных конструкций в коде. Связь комментария с элементом кода достигается непосредственным расположением комментария перед описываемым объектом. В комментариях используется разметка для управления включением и форматированием документации.
Doxygen поддерживает генерацию документации в различных форматах, включая HTML, CHM, RTF, PDF, LaTeX, PostScript и man-страницы.
Возможна генерация диаграмм наследования для C++-классов, а для расширенных схем и графов можно использовать инструмент dot из пакета Graphviz[14].
Пример использования
Все примеры приведены для языков с С-подобными комментариями, где многострочный комментарий начинается с /*, а однострочный — с //.
Doxygen игнорирует комментарии, если они не размечены специальным образом. Для многострочного комментария маркером служит начало с /** или /*!. Каждый тег разметки начинается со слэша (\) или знака @[15]. Пример блока комментариев с основными тегами:
/**
* Описание функции
* @param p1 Описание параметра p1
* @param p2 Описание параметра p2
* @return Описание возвращаемого значения
*/
void foo(int p1, int p2) {}
Блок может быть оформлен различным образом. Часто используют выравнивание звёздочек по левому краю:
/**
* Описание функции
* @param p1 Описание параметра p1
* @param p2 Описание параметра p2
* @return Описание возвращаемого значения
*/
void foo(int p1, int p2) {}
Также допустим вариант с серией однострочных комментариев. Doxygen поддерживает дополнительный слэш (///) или восклицательный знак (//! ...)[16].
/// Описание функции
/// @param p1 Описание параметра p1
/// @param p2 Описание параметра p2
/// @return Описание возвращаемого значения
void foo(int p1, int p2) {}
Чтобы разместить документационный комментарий справа от кода, используется добавочный маркер <[17]. Это позволяет иначе описывать параметры:
/**
* Описание функции
*/
void foo(int p1 /**< Описание параметра */, int p2 /**< Описание параметра */) {}
Математические формулы могут быть оформлены с помощью синтаксиса LaTeX. Например:
/**
* Встроенная формула @f$ e^{\pi i}+1 = 0 @f$
* Отдельно: @f[ e^{\pi i}+1 = 0 @f]
*/
Более развёрнутый пример на C++:
/**
* @file Time.cpp
* @module org.wikipedia.util.Time
* @brief Класс времени
* @author John Doe <jdoe@example.com>
* @version 1.0
* @copyright CC BY-SA или GFDL
* @sa <a href="https://en.wikipedia.org/wiki/Wikipedia:Copyrights">Wikipedia:Copyrights - Wikipedia</a>
*/
export module org.wikipedia.util.Time;
import org.wikipedia.core;
import org.wikipedia.util.Date;
using org::wikipedia::core::ISerializable;
/**
* @namespace org::wikipedia::util
* @brief Пространство имён утилит
*/
export namespace org::wikipedia::util {
/**
* @class Time
* @brief Представляет момент времени
* @author John Doe
*
* Класс Time представляет количество времени, прошедшее с эпохи UNIX.
*
* @extends Date
* @implements ISerializable
*/
class Time : public Date, public ISerializable {
private:
int64_t millis; ///< миллисекунд с 1 января 1970 года
public:
/**
* Создать новый объект Time с временем от 1 января 1970 года
* @param millis количество миллисекунд
*/
explicit Time(int64_t millis):
millis{millis} {}
/**
* Получить новый экземпляр с текущим временем
* @return Экземпляр
*/
nodiscard
static Time now() {
// ...
}
/**
* Получить количество миллисекунд, представляемых объектом Time
* @return int64_t — количество миллисекунд
*/
nodiscard
int64_t getTime() const noexcept {
return millis;
}
};
}
Примечания
- ↑ Руководство Doxygen: часто задаваемые вопросы (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 22 июля 2025 года.
- ↑ Perkel, Jeffrey M. Get With the Program: DIY tips for adding coding to your analysis arsenal (англ.). The Scientist. The Scientist (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 9 августа 2025 года.
- ↑ Sabin, Mihaela Doxygen (англ.). OpenComputing. University of New Hampshire (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 23 ноября 2015 года.
- ↑ Doxygen (англ.). Free Software Directory (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 14 июня 2025 года.
- ↑ Documentation (англ.). Rosetta Code (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 28 августа 2025 года.
- ↑ Documentation: C (англ.). Rosetta Code (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 28 августа 2025 года.
- ↑ Documentation: Objective-C (англ.). Rosetta Code (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 22 ноября 2015 года.
- ↑ Doxygen::Filter::Perl - A perl code pre-filter for Doxygen - metacpan.org. metacpan.org. Дата обращения: 29 июня 2024. Архивировано 25 августа 2018 года.
- ↑ 1 2 Руководство Doxygen: начало работы (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 6 сентября 2013 года.
- ↑ Automatic Python API documentation generation tools (англ.). python.org wiki (22 ноября 2015). Дата обращения: 29 июня 2024. Архивировано 12 августа 2025 года.
- ↑ Brown, Eric W. doxypypy: A Doxygen filter for Python. PyPI. Дата обращения: 29 июня 2024. Архивировано 13 августа 2025 года.
- ↑ ANNOUNCE: doxygen 0.1 ANNOUNCE: doxygen 0.1 (англ.). lists.trolltech.com (в архиве) (26 октября 1997). Дата обращения: 29 июня 2024. Архивировано 4 октября 2011 года.
- ↑ doxygen/doxygen (англ.). GitHub (9 июня 2021). Дата обращения: 29 июня 2024. Архивировано 18 сентября 2025 года.
- ↑ Руководство Doxygen: графы и диаграммы (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 26 сентября 2025 года.
- ↑ Doxygen: Special Commands (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 15 октября 2025 года.
- ↑ Doxygen: документирование кода — блоки комментариев для C-подобных языков (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 6 октября 2025 года.
- ↑ Doxygen: документирование кода — документация после объявления (англ.). www.doxygen.nl. Дата обращения: 29 июня 2024. Архивировано 6 октября 2025 года.