今天給大家介紹一下doxygen。這個工具由來已久了,至少08年左右就已經在用了,但是目前還沒見到好的介紹。我個人覺得這是個很簡單易用的工具,但是為什么看了別人介紹反而覺得復雜了……所以趁着今天比較閑就來說一說它。
doxygen是一個自動文檔生成工具,根據代碼里寫的注釋,自動生成html和latex格式的文檔。通常是給c++用的,通常是出html格式的,你看到的pcl網上文檔就是拿doxygen生成的。
事實上,隨意一份代碼,都可以拿doxygen生成一個文檔,然后在本地看它的代碼結構。 我們拿以難讀著稱的lsd-slam舉個例子。
首先,建個文件夾,把lsd-slam的代碼拷下來:
1 git clone https://github.com/tum-vision/lsd_slam.git
拷完之后lsd就在你電腦里躺着了。進到package_dir/lsd_slam/lsd_slam_core,打開一看?哇,一堆文件。仔細一看?哇,好多類和變量,還有藏着掖着的全局變量,還有SSE指令!太多了,沒法看,怎么辦?別急,我們用doxygen生成一個網頁來看。網頁的好處是可以隨處跳轉。
由於你電腦里可能還沒有doxygen,我們先來安裝一下:
1 sudo apt-get install doxygen doxygen-gui
什么?你不是Ubuntu怎么辦?你都不用Ubuntu了還用我教你裝軟件?
昂,總之,主要是doxygen本體和它的gui模塊。我在ubuntu14.04下是這兩個包名。如果你不確定,請用apt-cache search doxygen查一下。
裝好了之后,在該文件夾下開一個doc文件夾,把一會兒生成的文檔放里頭:
1 mkdir doc; cd doc
然后,輸入doxywizard調出gui面板。
1 doxywizard
然后就會出一個面板啦,來看看上面都有啥:(外觀視你的桌面環境可能略有不同)

大概能看出哪些地方要設置吧?首先把Step 1中的目錄設到你要保存文檔的目錄。Project name那些東西隨意,可以不設。比較重要的是源代碼目錄source code directory,請把它設到lsd_slam_core/src下,並鈎上Scan recursively,表明我們要掃描子文件夾。然后,輸出文件夾設成當前目錄./即可,本來我們就在當前目錄嘛。
這步做好了,點左邊的“Mode”,進入下一個版塊。下個版塊里會讓你選語言,既然咱們用c++,保持默認的就可以了。
Output和Diagrams也沒什么好動的。
現在准備工作完成啦!切到Run,點“Run doxygen",嘩啦嘩啦,等文檔生成完。然后點“show html output",就可以在瀏覽器里看到文檔啦。如果你下一次想直接看,直接打開doc/html/index.html就可以了!

是不是和網上的文檔很像啊?看這個比看源代碼效果更高哦!
命令行
doxygen本身是命令行格式的,給一個配置文件,然后根據配置文件去生成文檔。但是!幾百個配置選項我怎么記得住啊!既然圖形界面那么好用為啥要去用命令行啊!哦你沒有桌面環境?那還是乖乖用命令行吧……
命令行的doxygen也很簡單。首先用
1 doxygen -s -g settings.txt
生成一個配置文件,然后去修改配置文件里的值,基本上和上面講的差不多啦!只是配置會復雜一點。比較重要的參數有輸入,輸出,掃描文件的后綴名等等。其實這些都可以在圖形界面的“Expert“里配的!我也是這么干的!所以如果你有屏幕的話還是建議你用圖形界面啦!當這個文件改好后,調用
doxygen settings.txt
按這個文件生成文檔。當然如果你寫錯了,文檔就不會生成了!所以還是用圖形界面吧!(我在俊哥面前就調了半天這東西的配置文件結果人家妹子都睡着了我才調出來,所以在妹子面前調程序請務必找個熟悉的調)
后話
doxygen還能按照一些特殊注釋格式來生成特別的文檔。如果你感興趣,可以看看上一講octomap里的那個doc/目錄。它也可以用doxygen生成一個文檔,但那個文檔功能更高級些,可以顯示類繼承關系樹狀圖等等。據說還能生成別的語言的注釋,然而像python估計也不需要這種工具……總之,你要玩的話,doxygen還是有些東西可以玩的,雖然並不太多。本着KISS原則,我還是把它當成一個簡單好用的小工具,不必太折騰就能出文檔啦!那么,本講就寫到這里,咱們下次再見!
