2011-10-12 19 views
0

我與Doxygen的相對初學者,我記錄一個C程序Doxygen的條件編譯DES不會產生文檔

部分的代碼是:

\#include "options.h" 
// options.h contains 
\#define VAL0 0 // Possible values for PARAM 
\#define VAL1 1 
\#define PARAM VAL0 

// Here's the conditional compilation 
\#if (PARAM == VAL0) 
// code chunk, which doesn't get compiled by Doxygen 
\#endif 

代碼使用GCC編譯如預期,但我沒有得到任何Doxygen文檔

OK,Doxygen的不展開宏,所以我嘗試:

\#define SYMEQ(A, B) (A == B) ? 1 : 0 

\#if SYMEQ(PARAM, VAL0) 

// code chunk 

\#endif 

設置Doxygen的:

MACRO_EXPANSION = YES

EXPAND_ONLY_PREDEF = YES

沒有預定義宏

EXPAND_AS_DEFINED = SYMEQ

從條件部分 輸出

沒有Doxygen的,只是到它

我也試過EXPAND_AS_DEFINED SYMEQ(A,B)

還沒有運氣

我發現用簡單的名稱,然後#ifdef來名\代碼#ENDIF幾個例子,但是沒有帶宏功能

感謝您的幫助,

傑裏

回答

1

MACRO_EXPANSIONEXPAND_ONLY_PREDEF只控制一個宏是否會在您的代碼中擴展,而不是如何在條件預處理器塊中評估它。例如,如果你有這樣的代碼:

#define RET_TYPE int 

/** 
* Some function 
*/ 
RET_TYPE func(void); 

隨着MACRO_EXPANSION=NO,這將是由doxygen的爲RET_TYPE func(void)記錄,宏未展開。用MACRO_EXPANSION=YES,這將被記錄爲,該宏被擴展併產生簽名被記錄。

要控制條件代碼,您需要關注ENABLE_PREPROCESSING。如果此選項設置爲NO,則條件代碼將被忽略,並且條件內的所有代碼都將被記錄。如果它設置爲YES,則會評估條件代碼,並且僅記錄條件匹配的塊。在這種情況下,您需要確保正確定義了所有正在評估的值,這可以通過允許doxygen評估包含文件(請參閱SEARCH_INCLUDES,INCLUDE_PATHINCLUDE_FILE_PATTERNS選項),或者通過預先定義宏來實現一個特定的值(見PREDEFINED)。

2

我剛剛遇到了問題#ifdef CONDITION \code not compiled by doxygen\ #endif,並用蠻力對其進行修復,即手動將條件附加到設置PREDEFINED=CONDITION1 CONDITION2 ...

我試過頭文件解決方案 - 生成一個文件的條件,並通過設置SEARCH_INCLUDES,INCLUDE_PATHINCLUDE_FILE_PATTERNS包括它 - 但它沒有奏效。從doxygen manual,我認爲它需要明確#include "the condition file"在源文件中,這意味着修改源代碼,所以我放棄了。

SEARCH_INCLUDES:如果一個的#include發現 如果SEARCH_INCLUDES標籤設置爲YES(默認值)包括在INCLUDE_PATH文件(見下文)將被搜索。