2017-02-28 2 views
1

Unser C++ - Programm verfügt über eine integrierte Skriptschnittstelle und kann Skripts darin ausführen. Die Skripts haben Zugriff auf Komfortfunktionen, die vom C++ - Programm bereitgestellt werden.Doxygen: Erzwingen von nicht deklarierten Funktionen, die dokumentiert werden müssen

Jetzt möchten wir, dass Doxygen die Dokumentation der Funktionen erstellt, auf die das Skript zugreifen kann. Eine solche sieht eine Funktionsdeklaration wie folgt aus:

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.. 
//... 
} 

Offensichtlich Doxygen wird keine

sleep_ms(const unsigned int timeout_ms)

in der Dokumentation enthalten. Gibt es eine Möglichkeit, Doxygen das zu sagen?

+0

Möglichkeit, die ich sehe, ist ein Prototyp der Funktion und dokumentieren zu erstellen. – albert

+0

ja, das habe ich schon probiert. 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); }, Aber da der Prototyp innerhalb der Funktion ScriptEngine :: load_script platziert wird, wird die Funktion sleep_ms von Doxygen ignoriert – pioupus

Antwort

0

tun:

  1. Fügen Sie die folgende Zeile in Doxyfile:

    PREDEFINED = _DOXYGEN_ 
    
  2. Machen Sie das ENABLE_PREPROCESSING-Tag in der Doxyfile sicher YES gesetzt.

  3. Legen Sie Ihre Deklarationen und Dokumentation für die nicht deklarierten Funktionen in einem #ifdef _DOXYGEN_ Abschnitt.

    #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 
    

Sie innerhalb einer Methode oder Funktion wie ScriptEngine::load_script(), wie Sie vorher versucht, setzen Sie den obigen Code nicht. Und fügen Sie sie nicht in einen Namespace oder eine Klasse ein, es sei denn, die deklarierte Funktion ist ein Member dieses Namespace oder dieser Klasse.

Mit dieser Methode erstellen Ihre Deklarationen keine Linker-Fehler während eines normalen Builds, sondern werden von Doxygen gesehen.

Siehe auch

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

Verwandte Themen