2017-02-28 24 views
1

我們的C++程序有一個內置的腳本接口,並且能夠在其中運行腳本。這些腳本可以訪問由C++程序提供的便利功能。Doxygen:強制未聲明的函數被記錄

現在我們希望Doxygen創建腳本可以訪問的函數的文檔。這樣的函數聲明如下:

void ScriptEngine::load_script(const QString &path) {  
//... 

    /*! \fn sleep_ms(const unsigned int timeout_ms) 
     \brief sleeps for timeout_ms milliseconds. 
     \param timeout_ms 
    */ 
    (*lua)["sleep_ms"] = [](const unsigned int timeout_ms) { 
     //sleep(timeout_ms) 
    }; 

    //more convenience functions.. 
//... 
} 

顯然Doxygen的將不包括

sleep_ms(const unsigned int timeout_ms)

到文檔。有沒有辦法告訴Doxygen這樣做?

+0

可能性,我看到的是建立一個原型的功能和記錄它。 – albert

+0

是的,我已經試過了。 void ScriptEngine::load_script(const QString &path) { //... /*! \fn sleep_ms(const unsigned int timeout_ms) \brief sleeps for timeout_ms milliseconds. \param timeout_ms */ void sleep_ms(const unsigned int timeout_ms); }, 但是由於原型放置在函數ScriptEngine :: load_script中,函數sleep_ms被Doxygen忽略 – pioupus

回答

0

這樣做:

  1. 以下行添加到您的Doxyfile:

    PREDEFINED = _DOXYGEN_ 
    
  2. 確保在對的Doxyfile標籤ENABLE_PREPROCESSING設置爲YES

  3. 將您的聲明和文檔的未申報功能放入#ifdef _DOXYGEN_部分。

    #ifdef _DOXYGEN_ 
        /*! \fn sleep_ms(const unsigned int timeout_ms) 
         \brief sleeps for timeout_ms milliseconds. 
         \param timeout_ms 
        */ 
        void sleep_ms(const unsigned int timeout_ms); 
    #endif 
    

不要把上面的代碼的方法或函數,如內ScriptEngine::load_script(),因爲你以前嘗試。除非事實上被聲明的函數是該名稱空間或類的成員,否則不要將其放入命名空間或類中。

使用此方法,您的聲明不會在正常構建過程中創建鏈接器錯誤,但會被Doxygen看到。

請參見

http://www.stack.nl/~dimitri/doxygen/manual/config.html#cfg_predefined