DoxyGen的功能相當多,目前我已經使用在C/C++,C#,php,perl,javascript上
此軟體也附了GUI介面來快速產生Doxyfile
以下就對各種平台及語言的安裝做個介紹
平台
Windows
Linux
MacOS X
Solaris9
FreeBSD
下載頁面在可以安裝apt的平台上,你也可以找得到doxygen
語言共同特性
在這之前,你可以先參考以下文章
http://www.dev.idv.tw/wp/index.php?p=22http://cdblog.twbbs.org/post/119/1657http://www.longwin.com.tw/~jon/blog/archives/000299.html這些文章會讓你先熟悉各種操作及撰寫方式。
本文主要在比較告種語言的撰寫過程及會遇到的問題。
各種語言有其不一樣的註解方式,不過遵循以下的註解方式,會讓文件比較不會出錯 。
注意到第二行開始的*都是有一個空白在前面的,雖然我曾嘗試過不依照這種法則,不過會發生有文件解析不出來的情況。對於各種語言,只要維持原本程式本身的註解樣式即可。但是註解要怎樣搭配各種程式語言,就是本篇文章要討論的。
JAVADOC_AUTOBRIEF將這個選項開啟,你將可以用下列方式撰寫。
[code lang="cpp"]
/** 第一行是簡述
* 這邊開始才是詳文
*/
[/code]
否則你就必須在第一行加上@brief
C#,Java
C#和Java比較簡單的是,照著IDE預設撰寫的方式,就很容易地產生文件。
雖然有個工具可以輔助Visual Studio.Net 2003快速新增註解,叫做
DoxyComment,不過在2005上跑是有問題的。
再設定Doxyfile的時候,還是要注意windows平台使用的都是絕對位置,所以更動專案的位置會導致問題。不過WorkingSpace卻不需要指定,重新開啟doxyfile就會自動決定。
php4
在這裡要討論的是比較舊的PHP4。
PHP說起來在Doxyfile的設定並沒有什麼太大的不同,但tag與phpDocumenter比較起來,就少了@var的tag。由於PHP4並沒有accessor(如public, protected),所以要記得在private member的名字前加上" _ "來和public member做區別。Doxygen只會掃瞄到public method,不會掃到任何class內的public member。所以撰寫php的時候,還是比較像撰寫C++的習慣,會寫get,set來存取property,而var的宣告,就只能當作private property了。
PHP對於原生型態的判斷,如is_null,is_object等。如果是撰寫物件導向,就經常會遇到物件型態的判斷。
[code lang="php"]
function testInput($arg)
{
if(gettype($arg) == "object")
{
if(get_class($arg) == "domdocument")
print "input domdocument"
elseif(get_class($arg) == "domelement")
print "input domelement"
}
elseif(gettype($arg) == "string")
{
print "input is string"
}
else
{
print "input wrong type"
}
return $arg
}
?>
[/code]
就這個範例來說,在註解的時候,就比較不能像是php官方文件經常會看到的mixed arg這樣的註解方式。我還是比較推薦,使用以下的註解:
[code lang="php"]
/**
* @param arg
* DomDocument: 輸入DomDocument object
* DomElement: 輸入DomElement object
* string: 輸入string會自動建立...
* @return
* DomDocument: 原DomDocument object
* DomElement: 原DomElement object
* string: 原string...
*/
[/code]
如此便不會有輸入型態錯誤的問題,你的程式如果釋出的是函示庫,使用者撰寫你的函示庫也會比較得心應手。
Perl
Doxygen並不支援Perl,也是因為Perl的物件導向撰寫有大大的不同。
BigSister團隊也使用doxygen,他們自己撰寫了
perl doxygen filter,產生出來的文件會比較像是php撰寫的。
安裝相當簡單
[code lang="cpp"]
tar zxf doxygenfilter-1.01.tar.gz
cd doxygenfilter-1.01
perl Makefile.PL
make all install
[/code]
之後在你的Doxyfile內加上
INPUT_FILTER = doxygenfilter
FILE_PATTERNS = *.pm *.pl
註解的樣式也是要特別注意,開頭沒有兩個#加一個空白是不行的。
[code lang="perl"]
## @file
# 檔案的描述
# @class MyClass
# class的描述
package Some::Name::Space::MyClass;
## @cmethod new($arg,%opt)
# 建構子
# @param arg
# XML::DOM::Document: 傳入Document
# XML::DOM::Element: 傳入Element
# string: 輸入string會自動建立...
# @param opt
# [optional]Debug=>Integer,值可以是1.
# [required]Run=>Boolean
sub new {
my ($class,$arg,%opt)=@_;
...
}
[/code]
Perl也是很難做物件型態的判斷,所以還是要註解清楚。