1. 程式人生 > >使用GTK-DOC自動生成API文件

使用GTK-DOC自動生成API文件

作者:劉旭暉 Raymond轉載請註明出處

之前很少做從零開始做上層應用和中間層的開發,所以從來沒有接觸過API文件的自動生成這個話題,一直以為這是個很複雜的工作,最近做一個簡單的專案,有需求自己從頭完整的建立整個專案的框架,所以正好用gtk-doc-tools實踐一把文件的自動生成工作,發現其實還是很簡單易用的,記錄一下一些要點如下。

1相關參考資料

如果你仔細的看過這份手冊,再在實際實踐中處理過一些可能遇到的問題,基本上就不用看我的這篇文件了 ;-)

2工作機制

GTK-Doc是一個用來從C程式碼的註釋中生成API文件的工具,尤其適用於使用gobject物件機制程式設計的專案,並不侷限於

GTK+GNOME相關library和程式的文件生成。

2.1主要工作流程

基本上,使用GTK-Doc生成API文件,包括幾個步驟:

Ø在專案相關目錄和Build相關檔案中新增 GTK-Doc所需引數和相關配置檔案。

Ø在程式碼中按照一定的格式規範添加註釋(於普通的註釋相比,只需要新增非常少的額外資訊)

Ø使用標準的Build流程(autogenconfiguremake等)編譯並生成文件

Ø修改部分GTK-Doc生成的模板和配置檔案,進行一些定製工作,如排除某些函式,定製佈局,新增而外的help文件等(這部分工作並不需要每次都做,這些模板和配置檔案只在第一次build的時候生成,以後不會自動覆蓋)

3步驟

3.1新增Build所需內容

Ø新增目錄結構:通常會將API文件建立在docs/reference目錄中。根據需求可以建立多個子目錄用於不同的模組。另外,在各層目錄結構中,新增標準的Makefile.am檔案用來包含子目錄就不用多說了吧。

ØAutogen.sh: automakeautoconf等操作之前,新增gtkdocize || exit 1,如果你沒有建立autogen.sh,那麼你就需要在build之前手工執行gtkdocize命令。可以使用 gtkdocize –flavour no-tmpl 來限制不生成tmpl模板目錄(即不使用中間模板,文件全部內容直接從source code

獲得)

ØConfigure.ac: 新增gtk-doc檢測的相關巨集,如:GTK_DOC_CHECK(1.9) 除了檢查GTK-Doc的版本,這個巨集還將在configure指令碼中新增 –enable-gtk-doc選項,需要注意的是,這個選項預設是disable

ØMakefile.am: docs/reference或你建立的其它文件子目錄下,拷貝gtk-doc-toolsexample Makefile.amubuntu中安裝在/usr/share/doc/gtk-doc-tools/examples/Makefile.am)並根據實際情況修改裡面的內容(每個選項都有具體的解釋)。通常你所需要修改的大概會有:

模組的名字:DOC_MODULE=

程式碼的相對路徑:DOC_SOURCE_DIR=

文件在哪些檔案被修改時需要被重新build,即依賴關係:HFILE_GLOB= , CFILE_GLOB=

需要忽略的檔案:IGNORE_HFILES=

3.2在程式碼中添加註釋

GTK-Doc所識別的註釋都是以 “/**” 開頭,每行一個 “*”,以”*/” 結尾,中間包含一些特定的關鍵字或符號用於標明註釋的內容和型別,以區別於普通文字。

3.2.1檔案頭的格式

首先當然是要給檔案新增檔案級的註釋,格式如下

/**

* SECTION:meepapp

* @short_description: the application class

* @see_also: #MeepSettings

* @stability: Stable

* @include: meep/app.h

*

* The application class handles ...

*/

ØSECTION: 檔名

Ø@short_description: 該檔案內容的簡單描述

Ø@see_also: 與該文件相關的內容,符號等

Ø@stability: 版本穩定性資訊

Ø@include: 使用該檔案中的函式,所需要包含的標頭檔案,注意不用寫<…>”…”

3.2.2函式的註釋格式

函式的註釋格式大體如下:

/**

* function_name:

* @par1:description of parameter 1

* @par2:description of parameter 2

*

* The function description goes here.

*

* Returns: an integer.

*

* Since: Version

*/

Ø類似@par1: 這樣以”@”開頭的符號標識了你需要註釋的函式引數。

ØReturns: 函式的返回資訊

ØSince: 從哪個版本引入的函式

3.2.3其它

需要注意的一點是,上面這些關鍵字多數都是可選的,即使不寫任何註釋,GTK-Doc也會將函式,結構,屬性,訊號等資訊自動的新增到API文件中,只是沒有額外的說明資訊。另外,staticinline的函式不會被新增到文件中。

結構,屬性,訊號等註釋的格式這裡就不多說了,簡單的就看看別人的程式碼怎麼寫的,要想了解得詳細些,就參考gtk-doc的官方手冊吧。

3.3定製最終輸出結果

最終的文件會由一個主檔案將各個Section的頁面連結在一起,這個主檔案的SGML/XML模板檔案(MODULE-docs.sgml)在第一次build的時候生成,在以後的build中不會被覆蓋(即使使用make distclean也不會被刪除)。你可以修改這個主檔案模板,將輸出的section組織在不同的chapter中,或著新增額外的內容等等。

同樣,你還可以修改MODULE-sections.txt檔案,定製各個Section頁面的佈局和內容。這個檔案同樣不會在build過程中被自動覆蓋。