2016-01-19 20 views
7

Znalazłem w sieci przykładowy plik cmake i umieściłem go w podkatalogu /doc mojego projektu, gdzie znajduje się również plik myproject.doxgen, zawierający konfigurację Doxygena.Build doxygen ze skryptu CMake

Testowałem, że uruchomienie doxygen.exe myproject.doxygen daje prawidłowe wyniki. Muszę tylko zbudować to w procesie CMake. Więc /doc/CMakeLists.txt jest:

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

To nie działa dla mnie, to tylko kopiuje oryginalny plik konfiguracyjny do /build/my/project/doc/ i nie robi nic więcej.

To, czego chcę, to generowanie dokumentacji doxygen podczas moich kompilacji; idealnie, tylko podczas budowania konfiguracji Release.

+0

Pokazany plik CMake tworzy docelowy plik 'doc', który generuje doxymentację - co oznacza, że ​​może działać np. 'make doc' (lub odpowiednik) wygeneruje go. Czy to Ci pasuje? Czy potrzebujesz czegoś innego? – Angew

+0

Używam projektu w QT Creator. i nie uruchamia czegoś z linii poleceń. w/build/myproject/działa bez dodatkowych poleceń. tylko przez "build" z IDE – amigo421

+1

Musi istnieć "projekt/cel/jakakolwiek jest terminologia QtCreator" o nazwie 'doc'. Budynek, który zbuduje twoją dokumentację. Zauważ, że ponieważ nie ma żadnego argumentu "ALL" po 'doc' w poleceniu' add_custom_target', cel 'doc' to * nie * jest częścią' make all' (lub odpowiednik). – Angew

Odpowiedz

6

Sposób, w jaki konfigurowany plik CMake jest skonfigurowany, tworzy cel o nazwie doc; budowanie tego celu (takiego jak uruchamianie make doc) generuje doxymentation. Cel nie jest częścią make all (lub odpowiednika); aby uczynić go takim, dodać ALL do tworzenia niestandardowych docelowej:

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

Jeśli chcesz ograniczyć ten cel zbudować tylko w konkretnej konfiguracji (jak już wspomniano w komentarzach), można użyć 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 
) 

Może się zdarzyć, że niektóre generatory CMake nie poradzą sobie dobrze z pustym COMMAND. Mając to na uwadze, następujące rozwiązania powinny być bezpieczne:

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

Ostatnia wersja powoduje błąd: "[33%] Generowanie dokumentacji interfejsu API za pomocą Doxygen Nazwa pliku, nazwa katalogu lub składnia etykiety woluminu jest niepoprawna jom: C: \ dev \ workspace \ build \ myproject \ doc \ CMakeFiles \ doc .dir \ build.make [doc \ CMakeFiles \ doc] Błąd 1 ". czy wiesz, co to znaczy? – amigo421

+0

@ amigo421 Hm, jest możliwe, że niektóre generatory CMake'a nie lubią pustych 'COMMAND'. Dodałem bezpieczniejszą opcję – Angew

+0

dziękuję za cierpliwość. Właśnie zaczynam naukę cmake, ale muszę uruchomić projekt. jednak ostatnia wersja również nie działa dla mojego cmake. pozwól mi pokazać błędy (dwie dla tej wersji) – amigo421