2016-01-19 6 views
7

Ich fand im Web eine Beispiel-cmake-Datei und legte es in das /doc Unterverzeichnis meines Projekts, wo sich auch die Datei myproject.doxgen befindet, die Doxygen-Konfiguration enthält.Build Doxygen von CMake Skript

Ich habe getestet, dass doxygen.exe myproject.doxygen eine gültige Ausgabe erzeugt. Ich muss das nur in den CMake-Prozess einbauen. So /doc/CMakeLists.txt ist:

find_package(Doxygen) 
option(BUILD_DOCUMENTATION "Create and install the HTML based API   
documentation (requires Doxygen)" ${DOXYGEN_FOUND}) 

if(BUILD_DOCUMENTATION) 
    if(NOT DOXYGEN_FOUND) 
     message(FATAL_ERROR "Doxygen is needed to build the documentation.") 
    endif() 

    set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/../doc/myproject.doxygen) 
    set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/doxyfile) 

    configure_file(${doxyfile_in} ${doxyfile} @ONLY) 

    message("Doxygen build started.") 

    add_custom_target(doc 
         COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile_in} 
         WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc 
         COMMENT "Generating API documentation with Doxygen" 
         VERBATIM) 

    # install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html DESTINATION  share/doc) 
endif() 

Es ist nicht für mich arbeiten, kopieren Sie nur die Original-Konfigurationsdatei in /build/my/project/doc/ und tut nichts mehr.

Was ich möchte, ist die Doxygen-Dokumentation während meiner Builds zu generieren; idealerweise nur beim Erstellen der Release-Konfiguration.

+0

Die CMake Datei, die Sie gezeigt haben erstellt ein Build-Ziel 'doc' die die doxymentation erzeugt -, die zum Beispiel das Laufen bedeutet 'make doc' (oder gleichwertig) wird es erzeugen. Funktioniert das für dich? Oder brauchst du etwas anderes? – Angew

+0

Ich verwende das Projekt in QT Creator. und führt nichts von der Kommandozeile aus. in/build/myproject/es funktioniert ohne zusätzliche Befehle. nur über "build" von IDE – amigo421

+1

Es muss ein "Projekt/Ziel/was auch immer die QtCreator Terminologie ist" namens "doc" sein. Gebäude, das Ihre Dokumentation aufbauen wird. Beachten Sie, dass, da im 'add_custom_target'-Befehl kein 'ALL'-Argument hinter dem' doc' steht, das 'doc'-Ziel * nicht * ein Teil von' make all' (oder gleichwertig) ist. – Angew

Antwort

6

Die Art und Weise, wie die CMake-Datei, die Sie angezeigt haben, eingerichtet ist, erstellt ein Ziel namens doc; Durch das Erstellen dieses Ziels (z. B. Ausführen von make doc) wird die Doximierung generiert. Das Ziel ist nicht Teil von make all (oder gleichwertig); es so zu machen, ALL in die individuellen Ziel Schöpfung hinzufügen:

add_custom_target(
    doc ALL 
    COMMAND #... everything else as before 
) 

Wenn Sie dieses Ziel begrenzen wollen nur in einer bestimmten Konfiguration zu bauen (wie Sie in den Kommentaren erwähnt haben), können Sie generator expressions verwenden:

Es kann passieren, dass einige CMake Generatoren nicht gut mit einem leeren COMMAND zurechtkommen. In diesem Sinne sollte die folgenden ausfallsicher sein:

add_custom_target(
    doc ALL 
    COMMAND 
    $<$<CONFIG:Release>:${DOXYGEN_EXECUTABLE} ${doxyfile_in}> 
    $<$<NOT:$<CONFIG:Release>>:${CMAKE_COMMAND} -E echo "Only done in Release builds"> 
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc 
    COMMENT "Generating API documentation with Doxygen" 
    VERBATIM 
) 
+0

letzte Version erzeugt einen Fehler: "[33%] Generierung der API-Dokumentation mit Doxygen Der Dateiname, der Verzeichnisname oder die Laufwerkslabelsyntax sind falsch jom: C: \ dev \ workspace \ build \ meinprojekt \ doc \ CMakeFiles \ doc .dir \ build.make [doc \ CMakeFiles \ doc] Fehler 1 ". Weißt du, was das bedeutet? – amigo421

+0

@ amigo421 Hm, es ist möglich, dass einige CMake Generatoren den leeren 'COMMAND' nicht mögen. Ich habe eine sicherere Option hinzugefügt – Angew

+0

Vielen Dank für Ihre Geduld. Ich beginne gerade mit dem Lernen von CMake, muss aber das Projekt funktionieren lassen. Allerdings funktioniert die letzte Version auch nicht für meinen cmake. Lassen Sie mich Ihnen Fehler zeigen (zwei für diese Version) – amigo421

Verwandte Themen