2016-01-19 1 views
7

J'ai trouvé sur le Web un exemple de fichier cmake et l'ai placé dans le sous-répertoire /doc de mon projet, où se trouve également le fichier myproject.doxgen, contenant la configuration Doxygen.Créer doxygen à partir du script CMake

J'ai testé que l'exécution doxygen.exe myproject.doxygen produit une sortie valide. J'ai seulement besoin de construire cela dans le processus CMake. Alors /doc/CMakeLists.txt est:

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() 

Il ne fonctionne pas pour moi, il ne copie le fichier de configuration d'origine dans /build/my/project/doc/ et ne fait rien de plus.

Ce que je veux, c'est générer la documentation doxygen pendant mes builds; Idéalement, uniquement lors de la création de la configuration de version.

+0

Le fichier CMake que vous avez montré crée une cible de construction 'doc' qui génère le doxymentation - ce qui signifie que l'exécution par exemple 'make doc' (ou équivalent) va le générer. Est-ce que ça marche pour toi? Ou avez-vous besoin d'autre chose? – Angew

+0

J'utilise le projet dans QT Creator. et ne fonctionne pas quelque chose à partir de la ligne de commande. dans/build/myproject/cela fonctionne sans commandes supplémentaires. juste via "build" d'IDE – amigo421

+1

Il doit y avoir un "projet/cible/quelle que soit la terminologie de QtCreator" nommée "doc". Bâtiment qui va construire votre documentation. Notez que parce qu'il n'y a pas d'argument 'ALL' après le' doc' dans la commande 'add_custom_target', la cible' doc' ne fait pas partie de 'make all' (ou équivalent). – Angew

Répondre

6

La façon dont le fichier CMake que vous avez montré est configuré, il crée une cible appelée doc; la construction de cette cible (telle que l'exécution make doc) génère la doxymentation. La cible ne fait pas partie de make all (ou équivalent); pour le rendre tel, ajouter ALL dans la création d'une cible personnalisée:

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

Si vous voulez limiter cet objectif de construire que dans une configuration particulière (comme vous l'avez mentionné dans les commentaires), vous pouvez utiliser generator expressions:

add_custom_target(
    doc ALL 
    COMMAND $<$<CONFIG:Release>:${DOXYGEN_EXECUTABLE} ${doxyfile_in}> 
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc 
    COMMENT "Generating API documentation with Doxygen" 
    VERBATIM 
) 

Il peut arriver que certains générateurs CMake ne se comportent pas correctement avec un COMMAND vide. Avec cela à l'esprit, ce qui suit devrait être fail-safe:

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

La dernière version génère une erreur: "[33%] Génération de la documentation de l'API avec Doxygen Le nom du fichier, le nom du répertoire ou la syntaxe de l'étiquette de volume est incorrect. .dir \ build.make [doc \ CMakeFiles \ doc] Erreur 1 ". Savez-vous ce que cela signifie? – amigo421

+0

@ amigo421 Hm, il est possible que certains générateurs CMake n'aiment pas le 'COMMAND' vide. J'ai ajouté une option plus sûre – Angew

+0

pour vous remercier de votre patience. Je commence juste à apprendre mais j'ai besoin de faire fonctionner le projet. Cependant, la dernière version ne fonctionne pas pour mon cmake. laissez-moi vous montrer les erreurs (deux pour cette version) – amigo421