2014-09-25 18 views
4

如建議here,我的代碼中有一些部分是由編譯標誌啓用的。使doxygen doxument也是#ifdef部分

比如我有這段代碼:

#ifdef MYPROJ_HAS_BOOST 
    ... 
#endif 

的Doxygen會離開他們,因爲他們都省略了,因爲MYPROJ_HAS_BOOST沒有定義。我解決了它,並添加了一個#define MYPROJ_HAS_BOOST

但是這並不好,因爲將來(我打算擴展該項目),當重新生成我的文檔時,也許我會忘記這一點。

有沒有辦法對Doxygen說(理想情況下通過doxywizard)來考慮我的代碼的這些部分呢?

回答

6

我認爲你只需要通過在doxygen配置文件中設置ENABLE_PREPROCESSINGNO來完全禁用預處理。

doxywizard去專家 - >預處理器,你會發現ENABLE_PREPROCESSING。只需取消將其設置爲NO即可。

有關doxygen中預處理的更多信息,請參見文檔here

+0

我接受這個答案,因爲它更一般。 – gsamaras 2014-09-25 16:13:06

6

在你Doxyfile(或任何你已經重新命名爲)通過設置變量PREDEFINED包括MYPROJ_HAS_BOOST加入doxywizard行

PREDEFINED = MYPROJ_HAS_BOOST 

你也可以做到這一點。

+0

沒有檢查它,但可能會工作。但是,那麼我可能會改變我的標誌,並且設置將會浪費。 +1,因爲我可能(出於某種原因,現在我想不出來)只想用'MYPROJ_HAS_BOOST'來考慮零件。 – gsamaras 2014-09-25 16:14:23

3

Doxygen定義了您可以使用的宏DOXYGEN

#if defined(MYPROJ_HAS_BOOST) || DOXYGEN 
    ... 
#endif 

如果你有很多的宏,它可能是更容易添加doxygen的宏觀然後用一箇中的Doxyfile同步您的宏。

+0

適用於快速解決方案。不過,我有一個宏,但在幾個地方。儘管(儘管解決方案的權力有所不同),但+1。 – gsamaras 2014-09-25 16:15:11

2

我今天的理解是,dxygen支持定義。在你的情況,你應該能夠

ENABLE_PREPROCESSING = YES 

,並設置

PREDEFINED = MYPROJ_HAS_BOOST 

PREDEFINED = MYPROJ_HAS_BOOST=1 

如果你想改變reserse它(如你在你的例子想吧)

PREDEFINED = MYPROJ_HAS_BOOST=0 

是更詳細的解釋here

+0

感謝您的回答,我沒有測試它,但它似乎沒問題。 – gsamaras 2016-05-27 18:09:04