精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在 Linux 上用 Doxygen 生成源代碼文檔

系統 Linux
Doxygen 是一款廣泛使用的開源文檔生成工具,它通過代碼注釋來生成文檔。

在試著熟悉別人的代碼時,你總希望他們留下的代碼注釋能對你理解代碼有所幫助。同理,無論為了自己還是其他人,編寫代碼時寫注釋是好習慣。所有編程語言都有專門的注釋語法,注釋可以是一個單詞、一行文字、甚至是一整段話。編譯器或解釋器處理源代碼時會忽略注釋。

注釋不能完全取代文檔,但是有方法可以使用注釋來生成文檔。Doxygen 是一個開源的文檔生成工具,它能夠根據代碼注釋生成 HTML 或 LaTeX 格式的文檔。Doxygen 讓你在不用額外操作的情況下創建代碼結構概覽。盡管 Doxygen 主要是用來給 C++ 生成文檔的,它對其它語言同樣適用,比如 C、Objective-C、 C#、 PHP、Java 和 Python 等。

要使用 Doxygen,你只需要在源代碼中使用 Doxygen 能夠識別的語法來寫注釋。Doxygen 會掃描源碼文件,然后根據這些特殊注釋生成 HTML 或 LaTeX 文檔。下面的示例項目會演示如何使用 Doxygen 注釋,以及文檔是如通過注釋生成出來的。示例代碼可從 GitHub 上獲得,本文中也將引用 Doxygen 手冊及文檔 的相關章節。

在 Linux 上安裝 Doxygen

在 Fedora 上可以通過軟件包的形式安裝 Doxygen。打開終端運行命令:

sudo dnf install doxygen

在基于 Debian 的操作系統上,可以通過以下命令來安裝:

sudo apt-get install doxygen

使用

安裝完 Doxygen 后,你需要在項目中按 Doxygen 可以識別的格式來注釋代碼,還要提供一個 Doxyfile 配置文件來控制 Doxygen 的一些行為。

注意:如果你用的是 GitHub 上的示例項目,你可以忽略下面一步。

如果 Doxyfile 文件不存在,你可以用 Doxygen 生成一個標準 Doxyfile 模板文件。切換到項目根目錄下,運行:

doxygen -g

參數 -g 表示 生成generate。現在應該會出現一個名為 Doxyfile 的新文件。通過命令調用 Doxygen:

doxygen

現在應該能會有兩個新文件夾:

  • html/
  • latex/

默認情況下,Doxygen 會同時輸出 LaTeX 和 HTML 格式的文檔。本文主要關注 HTML 文檔。你可以在 Doxygen 官方文檔的入門小節中找到關于 LaTeX 格式輸出的更多信息。

雙擊 html/index.html 打開 HTML 文件。用空的配置文件生成的文檔如下圖:

A screenshot of a doxygen generated main page on Firefox. The content field under My Project Documentation is blank.A screenshot of a doxygen generated main page on Firefox. The content field under My Project Documentation is blank.

現在我們試著修改 Doxyfile 文件,并在源代碼中添加特殊注釋。

Doxyfile 文件

在 Doxyfile 文件中可以定義大量的可調選項,本文通過介紹示例項目的 Doxyfile 文件我只能覆蓋其中很小的子集。

第 35 行:項目名稱

你可以在這里指定項目名稱,它最終會顯示在頁眉header和瀏覽器標簽上。

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.
PROJECT_NAME           = "My Project"

第 47 行:項目簡介

項目簡介會以略小的字號顯示在頁眉上。

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.
PROJECT_BRIEF          = "An example of using Doxygen in C++"

第 926 行:包含子目錄

允許 Doxygen 查找源代碼和文檔文件時遞歸遍歷子目錄。

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.
RECURSIVE = YES

第 1769 行:禁用 LaTeX 輸出

如果你只想生成 HTML 文檔,可以通過這個開關禁用 LaTeX 輸出。

# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
# The default value is: YES.
GENERATE_LATEX = NO

修改完成后,你可以再次運行 Doxygen 來檢驗修改是否生效了。可以在調用 Doxygen 時使用 -x 選項來查看 Doxyfile 文件的變更項:

A screenshot of the terminal showing the differences, Project Name, Project Brief, Recursive, and status of Generate LatexA screenshot of the terminal showing the differences, Project Name, Project Brief, Recursive, and status of Generate Latex

通過調用 diff 命令,Doxygen 僅顯示當前 Doxyfile 文件和模板文件的差異。

特殊注釋

Doxygen 通過掃描源代碼文件中的特殊注釋和關鍵字來生成 HTML 文檔。示例項目中的 ByteStream 類的頭文件可以很好地解釋特殊注釋的用法。

下面用構造函數和析構函數作為示例:

/*! @brief Constructor which takes an external buffer to operate on
*
* The specified buffer already exist.
* Memory and size can be accessed by buffer() and size().
*
* @param[in] pBuf Pointer to existing buffer
* @param[in] size Size of the existing buffer
*/
ByteStream(char* pBuf, size_t size) noexcept;

特殊注釋塊有不同的格式風格。我傾向于使用 /*! 開頭(Qt 風格),每行前添加 *,以 */ 結束注釋塊。你可以參考 Doxygen 手冊的文檔化代碼小節,以大致了解不同的風格選項。

Doxygen 注釋分兩個部分:簡要描述和詳細描述。它們都是可選的。在上面的例子中的注釋塊是對緊跟其后的構造函數聲明的描述。在 @brief 之后的文本會顯示在類概覽小節中:

A screenshot of the C++ example of using Doxygen showing the Byte Stream Class Reference. The categories in the list are public member functions, writing (operators for writing to the stream), and reading (operators for reading from the stream)A screenshot of the C++ example of using Doxygen showing the Byte Stream Class Reference. The categories in the list are public member functions, writing (operators for writing to the stream), and reading (operators for reading from the stream)

A screenshot of the C++ example of using Doxygen showing the Byte Stream Class Reference. The categories in the list are public member functions, writing (operators for writing to the stream), and reading (operators for reading from the stream)

在空行(空行是段落分隔符)之后是構造函數的實際文檔。用 @param[in/out] 關鍵字標注傳遞給構造函數的參數,Doxygen 基于此生成參數列表:

Screenshot of the Doxygen example showing the parameters under ByteStreamScreenshot of the Doxygen example showing the parameters under ByteStream

Screenshot of the Doxygen example showing the parameters under ByteStream

值得注意的是 Doxygen 為 buffer() 和 size() 方法自動生成了鏈接。相反,Doxygen 忽略了析構函數前的注釋,因為它并沒有使用特殊注釋:

// Destructor
~ByteStream();

現在你已經看到 Doxygen 的絕大部分功能了。通過使用一種稍微改良的注釋格式,讓 Doxygen 能夠識別它們。通過使用一些關鍵字,你甚至可以進一步控制格式化。在下一節中,我會進一步介紹 Doxygen 的其它特性。

其它特性

現在幾乎所有的工作都可以通過對源代碼注釋的方式完成。通過一些微調,你可以輕松地優化 Doxygen 的輸出。

Markdown 格式

為了進階的格式化,Doxygen 支持 Markdown 和 HTML 命令。Markdown 速查表可以在 這里 下載到。

項目主頁

除了自定義頁眉之外,html/index.html 幾乎沒有其它內容了。你可以通過使用關鍵字向其中添加一些有意義的內容。因為主頁通常不是針對某個源代碼文件的,你可以將要顯示在主頁的內容放到項目根目錄下的一個單獨文件中。示例項目中就是這樣做的,其輸出效果如下:

The Doxygen Example Documentation field now contains headings and documentation: Introduction, Running the example, System requirements, and Building the code, with step by step examples and code snippets (all can be found in the example on GitHub)The Doxygen Example Documentation field now contains headings and documentation: Introduction, Running the example, System requirements, and Building the code, with step by step examples and code snippets (all can be found in the example on GitHub)

自動鏈接生成

上面已將提到了,當你引用代碼的其它部分時,Doxygen 會自動識別并生成相應鏈接。但要注意,這要求被引用部分也有文檔才行。

更多信息可以在官方文檔的自動鏈接生成中找到。

分組

ByteStream 類重載overload 了的讀寫流操作符 (<< 和 >>)。在類的概覽中可以發現操作符被分為讀和寫兩組。分組是在 ByteStream 的頭文件中定義的。

分組的語法以標記 @{ 開始,以 }@ 結束。在標記范圍中的內容都屬于這個分組。在 ByteStream.h 中的實現如下:

/** @name Writing
* Operators for writing to the stream
* @{
*/
(...)
/** @}
* @name Reading
* Operators for reading from the stream
* @{
*/
(...)

/** @} */

你可以在官方文檔的分組中找到更多相關信息。

LLVM 支持

如果你用 Clang 構建項目的話,可以通過使用 -Wdocumentation 選項讓 Clang 對特殊注釋進行檢查。想了解該特性的更多信息,可以參考 LLVM 用戶手冊和 Dmitri Gribenko 的展示報告,它們可以在 Clang 網站上找到。

誰在用 Doxygen

Doxygen 是在 1997 年首次發布的。盡管有些年頭了,現在仍然有很多項目在使用 Doxygen。比如 NASA 的飛行軟件框架 F Prime、圖像處理庫 OpenCV、包管理器 RPM。你還可以在其它領域發現 Doxygen 語法標記的身影,比如內容管理平臺 Drupal 的文檔標準中。

注意:Doxygen 輸出的 HTML 文檔風格類似于九十年代網頁。并且它也難以描繪元編程和模板編程架構。在這些情況下,你應該選擇 Sphinx 而不是 Doxygen。

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-06-29 06:39:21

Linuxdust命令du命令

2023-05-11 13:55:00

LinuxKdenlive編輯視頻

2022-01-09 15:00:16

LinuxAudacity聲音編輯器

2021-12-03 15:04:06

FlatpakLinux

2021-12-07 12:00:12

UbuntuLinuxQt 6.2.2

2022-03-22 15:24:15

黑客勒索軟件

2022-03-06 20:24:50

音樂播放器Juk開源

2021-12-12 09:34:12

Linux轉換音頻SoundConver

2022-02-28 09:24:17

KWriteKateLinux

2021-10-08 14:14:03

jconsoleJavaLinux

2019-08-01 09:35:09

LinuxBashmessages

2019-11-07 15:02:00

Linuxstrace系統調用

2023-01-28 13:39:31

Linuxzram

2021-07-18 11:43:58

Linux密碼加密

2017-11-09 19:15:25

2015-08-28 09:38:51

Linux源代碼分析工具

2010-03-02 10:44:52

Linux rpm

2022-03-28 08:47:26

Skanlite掃描文件Linux

2022-05-06 08:26:23

GwenviewLinux照片

2018-06-25 09:54:14

LinuxDNS負載均衡
點贊
收藏

51CTO技術棧公眾號

午夜精品久久久久久久99樱桃| 国产一区二区三区综合| 亚洲日韩欧美视频一区| 伊人网在线综合| 国产成人在线视频免费观看| 成人av网在线| 国产精品一区二区女厕厕| 午夜剧场免费在线观看| 欧美激情99| 欧美精品在线观看一区二区| 成人一区二区免费视频| 欧美三级黄网| 91在线看国产| 亚洲一区二区三区视频播放| 欧美黑人一区二区| 欧美国产高清| 中文日韩在线观看| 中文字幕在线播放一区| 亚洲成人高清| 一本到一区二区三区| www.欧美黄色| 免费av网站在线看| 久久久影视传媒| 国产视频在线观看一区| 亚洲图片欧美在线| 天堂影院一区二区| 97在线视频免费播放| 天堂网av2018| 激情五月色综合国产精品| 欧美不卡一区二区三区四区| 亚洲欧美日韩精品一区| 午夜精品成人av| 精品露脸国产偷人在视频| 无码人妻精品一区二区蜜桃百度| a天堂中文在线88| ww久久中文字幕| 国产日韩久久| 国产a级免费视频| 精品在线一区二区| 国产精品午夜国产小视频| 国产精品一区二区6| 欧美视频亚洲视频| 精品综合久久久久久97| 性欧美疯狂猛交69hd| 日本久久黄色| 中文字幕欧美专区| 日韩中文字幕有码| 久久99高清| 亚洲欧洲一区二区三区久久| 玖玖爱在线精品视频| 成人爽a毛片| 精品国产一区二区精华| 日本中文字幕精品| 一区二区在线免费播放| 欧美成人高清电影在线| 精品伦一区二区三区| 日韩视频1区| 日韩欧美的一区二区| 性一交一黄一片| 国产成人av毛片| 亚洲成人精品视频| 在线天堂www在线国语对白| 美日韩黄色大片| 日韩成人av网| 小早川怜子久久精品中文字幕| 国产成人一区| 中文字幕在线观看亚洲| 国产高潮失禁喷水爽到抽搐| 农村少妇一区二区三区四区五区| 亚洲第一在线视频| 大又大又粗又硬又爽少妇毛片| 亚洲成a人片77777在线播放 | 手机在线免费观看毛片| 日本在线精品| 欧美麻豆精品久久久久久| 一级黄色大片儿| jizz国产精品| 亚洲欧美精品在线| 国产一二三四视频| 午夜国产精品视频| 4388成人网| 中文字幕在线网址| 国产精品系列在线播放| 精品国产中文字幕| porn视频在线观看| 亚洲激情图片小说视频| 91精品91久久久中77777老牛| 亚洲不卡系列| 欧美不卡一区二区三区四区| 性少妇bbw张开| 久久久久久久久99精品大| 久久久久久久亚洲精品| 无码人妻一区二区三区免费| 精东粉嫩av免费一区二区三区| 国产精品jizz视频| 成人午夜电影在线观看| 亚洲欧美色综合| 欧美国产激情视频| 91精品福利观看| 国产视频精品xxxx| 天天看片中文字幕| 视频在线观看一区二区三区| 亚洲一区国产精品| 久久99久久| 一区二区三区日韩在线观看| 蜜臀av午夜一区二区三区 | 久久久久一区二区| 免费超碰在线| 色婷婷综合激情| 久久久久国产免费| 欧美hd在线| 91精品国产91久久久久久久久| 91国内精品视频| 久久久久久久久久久久久夜| 亚洲乱码日产精品bd在线观看| 久久久免费人体| 国产丝袜一区视频在线观看| 青青草偷拍视频| 久久av中文字幕片| 欧美一二三区| 1区2区在线| 日韩欧美中文字幕精品| www.黄色com| 久久先锋资源| 久久av一区二区三区漫画| 四虎影视成人| 在线综合视频播放| 女性裸体视频网站| 日韩国产精品久久久久久亚洲| 久久精品一区二区三区不卡免费视频| av超碰免费在线| 91精品久久久久久久99蜜桃| 欧美激情视频二区| 久久中文在线| 欧美综合77777色婷婷| 国产欧洲在线| 亚洲高清久久久久久| 久久免费播放视频| 国产精品1区2区3区| 国产精品88久久久久久妇女| 日韩五码电影| www.日韩视频| 国产免费无遮挡| 最新不卡av在线| 日韩视频在线观看一区二区三区| 99久久亚洲精品蜜臀| 国产精品视频一区二区高潮| 成全电影播放在线观看国语| 在线观看网站黄不卡| 日本性高潮视频| 日本v片在线高清不卡在线观看| 日本视频一区在线观看| 欧美日韩精品一区二区三区视频| 亚洲天堂第一页| 国产99免费视频| 欧美激情资源网| 向日葵污视频在线观看| 国产高清一区| 91免费版黄色| ririsao久久精品一区| 亚洲第一区中文字幕| 国产成人愉拍精品久久 | 亚洲激情图片网| 老司机午夜精品| 成人免费看片视频在线观看| 美女精品视频在线| 97热精品视频官网| 你懂得在线网址| 欧美日韩小视频| 欧美日韩一级大片| 99国产精品国产精品久久| 国产a级片免费观看| 成人网18免费网站| 91精品国产高清久久久久久91裸体| 先锋影音在线资源站91| 亚洲国产欧美精品| 久久久久久久亚洲| 最新国产精品久久精品| 人妖粗暴刺激videos呻吟| 日韩综合小视频| 综合操久久久| 另类尿喷潮videofree| 国产精品91一区| av网站免费在线观看| 日韩成人在线视频网站| 中文字幕在线观看视频一区| 亚洲大片精品永久免费| 一级片久久久久| 不卡的av电影在线观看| 国产精品入口免费软件| 国语精品一区| 久久综合九九| 精品成人18| 热久久这里只有精品| www.在线视频| 亚洲人成网在线播放| www.黄色一片| 欧洲另类一二三四区| 精品视频久久久久| 国产精品色眯眯| 一区二区免费在线观看视频| 久久se精品一区精品二区| 少妇无码av无码专区在线观看 | 99精品国产视频| 欧美成人乱码一二三四区免费| 亚洲激情婷婷| 特级黄色录像片| 国产一区二区三区站长工具| 99在线视频首页| 国产精品一区二区免费福利视频| 97人人模人人爽人人喊中文字| 日本中文字幕在线观看| 亚洲精品一区二三区不卡| 性少妇videosexfreexxx片| 在线视频观看一区| 日韩欧美亚洲视频| 亚洲综合一区在线| 中文字幕无码日韩专区免费| 欧美激情中文字幕| 亚洲黄色在线网站| 成人小视频在线| 韩国三级丰满少妇高潮| 久久国产成人午夜av影院| 国产免费视频传媒| 亚洲一区国产| 成人在线国产视频| 午夜欧美精品久久久久久久| 亚洲砖区区免费| 欧美日中文字幕| 日本不卡在线观看| 亚洲肉体裸体xxxx137| 精品一卡二卡三卡四卡日本乱码| 欧美午夜在线播放| αv一区二区三区| 亚洲精品三区| 成人av资源在线播放| 成人在线高清| 国产精品丝袜久久久久久不卡| 一区二区三区短视频| 97超碰色婷婷| 狠狠躁少妇一区二区三区| 高清亚洲成在人网站天堂| 香蕉成人app免费看片| 欧美日韩国产二区| 国精一区二区三区| 久久久久久久久久国产精品| 羞羞网站在线免费观看| 色综合久久88色综合天天看泰| 制服丝袜中文字幕在线| 久久成人亚洲精品| 黄色在线播放网站| 九九热这里只有在线精品视| 青春草视频在线观看| 欧美极品少妇xxxxⅹ免费视频 | 国产精品成人观看视频国产奇米| 欧洲一区二区三区精品| 国产精品电影久久久久电影网| 亚洲天堂1区| 国产在线视频欧美| 亚洲高清999| 国产精品视频福利| 四虎884aa成人精品最新| 欧美日本韩国一区二区三区| 精品美女视频| 黄色网络在线观看| 好吊视频一区二区三区四区| 国产视频一视频二| 日韩av在线发布| 国产三级精品三级在线| 国产成人精品免费看| 精品无码国产一区二区三区51安| 91蝌蚪porny| 国产又粗又长免费视频| 亚洲精品免费在线| 自拍偷拍欧美亚洲| 精品视频在线视频| 精品久久久中文字幕人妻| 亚洲国产精彩中文乱码av| 国产毛片av在线| 久久高清视频免费| 中文日产幕无线码一区二区| 国产精品日韩一区| 国产精品传媒| 日韩欧美亚洲精品| 亚洲欧美综合| 国产又粗又长又大的视频| 国产麻豆欧美日韩一区| 中文字幕av网址| 亚洲欧美在线视频| xxxx.国产| 欧美精品tushy高清| 亚州av在线播放| 久久久av一区| 性欧美videohd高精| 99国产精品久久久久老师| 国产欧美日韩视频在线| 日韩精品综合在线| 精品影视av免费| 亚洲欧美视频在线播放| 最新国产精品久久精品| 中文字幕69页| 精品国产一区二区三区久久影院 | 五月婷婷狠狠操| 国产suv精品一区二区883| 91激情视频在线观看| 亚洲成人av中文| 国产日本精品视频| 国产亚洲精品久久久久久777| 少妇视频在线| 国产日韩欧美中文在线播放| 免费看久久久| 成人国产一区二区三区| 免费xxxx性欧美18vr| 精品人妻一区二区三区香蕉 | 国产69精品久久久久999小说| 久久精品国产秦先生| 无遮挡aaaaa大片免费看| 亚洲愉拍自拍另类高清精品| 亚洲图片中文字幕| 亚洲视频自拍偷拍| 在线观看网站免费入口在线观看国内 | 日韩欧美2区| 蜜桃日韩视频| 亚洲大片av| 无码人妻aⅴ一区二区三区玉蒲团| 国产精品人妖ts系列视频| 麻豆成人免费视频| 日韩黄在线观看| 2021中文字幕在线| 99精品99久久久久久宅男| 亚洲最新色图| 亚洲女人在线观看| 亚洲丝袜美腿综合| 国产免费黄色大片| www.亚洲人.com| 亚洲男女网站| 波多野结衣激情| 国产一区 二区 三区一级| 男人在线观看视频| 欧美福利视频一区| av在线免费播放| 99热在线国产| 亚洲毛片av| 最近日本中文字幕| 红桃视频成人在线观看| 天堂√在线中文官网在线| 97高清免费视频| 外国成人在线视频| 亚洲成熟丰满熟妇高潮xxxxx| 国产午夜一区二区三区| 亚洲永久精品一区| 最近2019好看的中文字幕免费 | 久久午夜av| 久久久视频6r| 欧美日韩一区二区在线视频| 在线激情免费视频| 亚洲一区中文字幕在线观看| 欧美69视频| 在线黄色免费网站| 色综合久久天天综合网| 91大神在线网站| 亚洲xxxxx性| 一区在线视频| 国产手机在线观看| 欧美三级视频在线| 成人影院在线观看| 国产精选一区二区| 久久综合狠狠| 中文字幕乱码av| 91日韩欧美| 久草福利视频在线| 国产精品电影一区二区| 国产成人三级在线播放| 97婷婷大伊香蕉精品视频| 中文字幕精品影院| 91女神在线观看| 亚洲最色的网站| 国产中文字幕在线观看| 成人a免费视频| 亚洲经典三级| 中文字幕第69页| 精品蜜桃在线看| 日本另类视频| 国产精品视频二| 久久精子c满五个校花| 国产毛片久久久久| 91高清免费视频| 国产精品成人a在线观看| 国产激情第一页| 欧美日韩精品欧美日韩精品| 国产精品—色呦呦| 无码免费一区二区三区免费播放 | 日韩电影免费在线| 欧美精品久久久久性色| 亚洲欧美另类国产| 亚洲国产精品免费视频| 116极品美女午夜一级| 亚洲精品乱码久久久久| 黄色片在线免费看| 国产精品一区在线观看|