strona główna komentowanie kodu generowanie dokumentacji

Doxygen jest narzędziem na licencji GNU General Public Licence i można go pobrać z www.doxygen.org.


Doxygen.exe jest programem obsługiwanym z linii poleceń. Pierwszym poleceniem, jakie należy wydać jest:
  • doxygen -g <config_file>
Zamiast <config_file> należy wpisać nazwę pliku konfiguracyjnego, który później będziemy edytować, np.:
  • doxygen -g config.txt
UWAGA: Użycie polecenia doxygen -g bez parametru spowoduje utworzenie pliku konfiguracyjnego o nazwie Doxyfile.

Plik konfiguracyjny jest plikiem tekstowym i możemy go edytować w dowolnym edytorze (np. w notatniku). Plik konfiguracyjny zawiera tagi wraz z wartościami oraz komentarze według następującej konwencji:
  • # TAG_DESCRIPTION
    TAG_NAME = TAG_VALUE
Komentarz umieszczany jest po znaku # i trwa do końca bieżącej linii. Białe znaki nie są interpretowane przez Doxygen'a i służą do przejrzystego formatowania pliku konfiguracyjnego.

UWAGA: Doxygen rozróżnia małe i wielkie litery. Nazwy tagów należy zawsze pisać wielkimi literami!

Załóżmy, że potrafimy już prawidłowo skomentować prostą klasę z kilkoma metodami. Na przykład taką:
  • /**
     * \brief klasa ulamek
     *
     * klasa obiektow umozliwiajaca operacje na ulamkach zwyklych.
     *
     * \version wersja alfa
     */
    class ulamek
    {
      private:
        long int licznik; /**< Licznik ulamka */
        long int mianownik; /**< Mianownik ulamka */
        long int nwd(long int, long int);
      public:
        ulamek(long int = 1, long int = 1);
        void pisz();
        ulamek mnozenie(ulamek &);
    };

    /**
     * \brief Oblicza najwiekszy wspolny dzielnik dwoch liczb.
     *
     * Pobiera dwie wartosci typu long int i zwraca wartosc typu long int.
     *
     * \param[in] a pierwsza liczba.
     * \param[in] b druga liczba.
     * \return najwiekszy wspolny dzielnik pierwszej i drugiej liczby.
     * \attention jesli druga liczba jest rowna zeru, zwraca pierwsza liczbe.\n
     *            jesli pierwsza liczba jest rowna zeru, zwraca druga liczbe.\n
     *            jesli obie liczby sa rowne zeru, zwraca 1.
     */
    long int ulamek::nwd(long int a, long int b)
    {
      int temp;
      if (a < 0)
        a = -a;
      if (b < 0)
        b = -b;
      if (a == 0)
      {
        if (b == 0)
          return 1;
        else
          return b;
      }
      else
      {
        if (b == 0)
          return a;
      }
      if (a < b)
      {
        temp = a;
        a = b;
        b = temp;
      }
      while (a % b != 0)
      {
        temp = b;
        b = a % b;
        a = temp;
      }
      return b;
    }

    /**
     * \brief Konstruktor mieszany.
     *
     * Tworzy obiekt klasy ulamek, automatycznie skracajac ulamek do
     * najprostszej postaci za pomoca funkcji nwd().\n
     * Jesli konstruktor zostanie wywolany bez argumentow,
     * zostanie utworzony obiekt klasy ulamek o wartosciach:
     * \c licznik \c = \c 1,
     * \c mianownik \c = \c 1
     *
     * \param[in] a licznik ulamka (domyslnie przyjmuje wartosc 1).
     * \param[in] b mianownik ulamka (domyslnie przyjmuje wartosc 1).
     * \attention jesli jako argument zostanie podany mianownik rowny zeru,
     *            wypisze komunikat na ekranie i przyjmnie mianownik rowny 1.
     */
    ulamek::ulamek(long int a, long int b)
    {
      long int temp;
      if (b == 0)
      {     cout << endl << "[BLAD DZIELENIA PRZEZ ZERO]" << endl;
        b = 1;
      }
      temp = nwd(a, b);
      licznik = a / temp;
      mianownik = b / temp;
    }

    /**
     * \brief Wypisuje na ekran zawartosc obiektu klasy ulamek.
     *
     * Wywolanie metody w pierwszej kolejnosci powoduje przejscie do nowej linii.
     * W nowej linii wypisuje na ekran licznik i mianownik oddzielony ukosnikiem (slash).
     */
    void ulamek::pisz()
    {
      cout << endl << licznik << "/" << mianownik;
    }

    /**
     * \brief Mnozy przez siebie dwa obiekty klasy ulamek.
     *
     * Pobiera obiekt klasy ulamek, mnozy go przez obiekt, na rzecz ktorego metoda zostala wywolana
     * i zwraca obiekt klasy ulamek do miejsca wywolania.
     *
     * \param[in] a obiekt klasy ulamek
     * \return Zwraca obiekt klasy ulamek, bedacy wynikiem mnozenia argumentu wejsciowego
     *         przez obiekt, na rzecz ktorego metoda zostala wywolana.
     */
    ulamek ulamek::mnozenie(ulamek &a)
    {
      long int licznik_new, mianownik_new;
      licznik_new = licznik * a.licznik;
      mianownik_new = mianownik * a.mianownik;
      ulamek temp(licznik_new, mianownik_new);
      return temp;
    }
UWAGA: W powyższym przykładzie użyłem nie przedstawionych wcześniej komend specjalnych (słów rozpoczynających się lewym ukośnikiem). Aby dowiedzieć się do czego służą i jak działają, zajrzyj do manuala na stronie www.doxygen.org.

Zapiszmy plik z kodem do katalogu, w którym znajduje się program doxygen.exe, pod nazwą ulamek.cpp.
W katalogu powinny teraz znajdować się trzy pliki:
  • doxygen.exe - program pobrany ze strony www.doxygen.org.
  • ulamek.cpp - plik programu z odpowiednio skomentowanym kodem (np. tak jak powyżej).
  • config.txt - utworzony przez nas wcześniej plik konfiguracyjny (poleceniem doxygen -g config.txt).
Teraz wystarczy tylko wydać polecenie:
  • doxygen <config_file>
W naszym przypadku:
  • doxygen config.txt
i już możemy przeglądać automatycznie wygenerowaną dokumentację! Domyślnie generowana jest dokumentacja w formatach HTML oraz LaTeX. Obie wersje zapisywane są w katalogu bieżącym.

Domyślnie nie jest generowana dokumentacja prywatnych składowych klas. W naszym przykładzie skomentowaliśmy dwie zmienne prywatne klasy ulamek oraz jedną metodę prywatną tej klasy. Aby były one widoczne w wygenerowanej dokumentacji należy ustawić poniższy parametr w pliku konfiguracyjnym:
  • EXTRACT_PRIVATE = YES
Dla zachowania porządku, warto ustawić również nazwę i wersję projektu (wg. poniższego wzoru):
  • PROJECT_NAME = "Moj pierwszy projekt"
  • PROJECT_NUMBER = "wersja alfa"
UWAGA: Argumenty tagów składające się z więcej niż jednego słowa należy umieszczać w cudzysłowach!

Doxygen pozwala ustawić dużo więcej szczegółowych opcji. Oto opis kilku z nich:
  • OUTPUT_DIRECTORY = <ścieżka_dostępu> - katalog wyjściowy dokumentacji
  • EXTRACT_STATIC = [YES/NO] - określa, czy dokumentować statyczne składowe klas
  • CLASS_DIAGRAMS = [YES/NO] - określa, czy generować diagram przedstawiający dziedziczenie klas
  • OPTIMIZE_OUTPUT_FOR_C = [YES/NO] - określa, czy optymalizować dokumentację dla języka C
  • INPUT = <ścieżka_dostępu> - ścieżka dostępu do plików źródłowych projektu
  • RECURSIVE = [YES/NO] - określa, czy w podkatalogach znajdują się pliki źródłowe projektu
  • GENERATE_HTML = [YES/NO] - określa, czy generować dokumentację w formacie HTML
  • GENERATE_LATEX = [YES/NO] - określa, czy generować dokumentację w formacie LaTeX
Więcej dokładnie opisanych opcji znajdziesz w manualu dostępnym na stronie www.doxygen.org.

UWAGA: Dokument, który właśnie przeczytałeś jest jedynie wstępem do dalszego samodzielnego odkrywania tajników niezwykle elastycznego narzędzia, automatycznie generującego dokumentację, jakim jest Doxygen. Kontakt z autorem: między http://info.wsisiz.edu.pl/, a /doxygen/ jest mój login. Usuń z niego tyldę, na końcu dopisz małpę oraz wsisiz.edu.pl

publikację przygotował: Paweł Sulewski

Valid HTML 4.01 Transitional Poprawny CSS!