2016-01-19 23 views
7

ho trovato sul file CMake campione Web e metterlo nel /doc sottodirectory del mio progetto, dove si trova anche il file myproject.doxgen, che contiene la configurazione Doxygen.Corporatura doxygen da CMake sceneggiatura

Ho verificato che l'esecuzione di doxygen.exe myproject.doxygen produce un output valido. Ho solo bisogno di creare questo nel processo CMake. Così /doc/CMakeLists.txt è:

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

Non funziona per me, è solo copia il file di configurazione originale in /build/my/project/doc/ e non fa nulla di più.

Quello che voglio è generare la documentazione doxygen durante le mie build; idealmente, solo quando si crea la configurazione Release.

+0

Il CMake hai mostrato crea una build target 'doc' che genera la doxymentation - che significa che la corsa per esempio 'make doc' (o equivalente) lo genererà. Funziona per te? O hai bisogno di qualcos'altro? – Angew

+0

Sto utilizzando il progetto in QT Creator. e non esegue qualcosa dalla linea di comando. in/build/myproject/funziona senza comandi aggiuntivi. solo tramite "build" da IDE – amigo421

+1

Ci deve essere un "progetto/target/qualunque sia la terminologia QtCreator" chiamato 'doc'. Costruire che costruirà la tua documentazione. Si noti che poiché non c'è alcun argomento 'ALL' dopo' doc' nel comando 'add_custom_target', il target' doc' è * non * parte di 'make all' (o equivalente). – Angew

risposta

6

Il modo in cui il file CMake che hai mostrato è impostato, crea un target chiamato doc; la creazione di quella destinazione (come l'esecuzione di make doc) genera la doxymentation. L'obiettivo non fa parte di make all (o equivalente); per renderlo tale, aggiungere ALL nella creazione di destinazione personalizzato:

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

Se si desidera limitare questo obiettivo di costruire solo in una particolare configurazione (come avete accennato nei commenti), è possibile utilizzare generator expressions:

Potrebbe accadere che alcuni generatori CMake non gestiscano correttamente uno COMMAND vuoto. Con questo in mente, il seguente dovrebbe essere fail-safe: il file

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

l'ultima versione genera un errore: "[33%] Generazione di documentazione API con Doxygen La sintassi dell'etichetta del nome file, nome directory o volume non è corretta. jom: C: \ dev \ workspace \ build \ myproject \ doc \ CMakeFiles \ doc .dir \ build.make [doc \ CMakeFiles \ doc] Errore 1 ". sai cosa significa? – amigo421

+0

@ amigo421 Hm, è possibile che alcuni generatori CMake non gradiscano il 'COMMAND' vuoto. Ho aggiunto un'opzione più sicura – Angew

+0

grazie per la vostra pazienza. Sto solo iniziando a imparare, ma ho bisogno di far funzionare il progetto. tuttavia anche l'ultima versione non funziona per il mio cmake. lasciatemi mostrare errori (due per quella versione) – amigo421