выборочно запустить Doxygen в Cmake - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть файл CMakeLists.txt, который обрабатывает генерацию Doxygen для программного проекта.Его содержимое:

find_package(Doxygen)
if (DOXYGEN_FOUND)
  set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
  set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
  configure_file(${doxyfile_in} ${doxyfile} @ONLY)
  add_custom_target(doc ALL
    ${DOXYGEN_EXECUTABLE} ${doxyfile}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating API documentation with Doxygen" VERBATIM) 
endif()

Мне бы очень хотелось запускать doxygen, только если я делаю сборку для установки.Есть ли какой-то простой способ сообщить это cmake?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я предложил подход, который разделяет работу между add_custom_command () и add_custom_target ():

find_package(Doxygen)
if (DOXYGEN_FOUND)
  set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
  set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile)
  configure_file(${doxyfile_in} ${doxyfile} @ONLY)
  add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/doxygen.stamp
    DEPENDS ${doxyfile}
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
    COMMAND cmake -E touch ${CMAKE_CURRENT_BINARY_DIR}/doxygen.stamp
    COMMENT "Generating API documentation with Doxygen"
    VERBATIM)
  add_custom_target(doc ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/doxygen.stamp)
endif()

Это не совсем то, о чем я изначально просил, но этого достаточно для моих целей,Я пока не собираюсь принимать этот ответ, в случае, если кто-то ответит ответом, который точнее отвечает на мой первоначальный запрос.

0 голосов
/ 13 декабря 2018

Сначала удалите ALL из add_custom_target().

add_custom_target(doc ALL

с помощью

add_custom_target(doc

Затем добавьте

install(CODE
  "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target doc)")

src: https://cmake.org/cmake/help/latest/command/install.html#code

Примеры

CMakeList.txt:

cmake_minimum_required (VERSION 3.5)
project(meta VERSION 1.0.0 LANGUAGES NONE)
# ....

enable_language(CXX)
add_executable(app main.cpp)

include(GNUInstallDirs)
set(CMAKE_INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/foo)
install(TARGETS app
  EXPORT FooTargets
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(EXPORT FooTargets
  NAMESPACE foo::
  DESTINATION ${CMAKE_INSTALL_CONFIGDIR}
)

# replace by your own code
add_custom_target(doxygen
  COMMAND echo Hello Doxygen
  VERBATIM
)

install(CODE
  "EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target doxygen)")

main.cpp

int main() {
  return 0;
}

Оболочка:

$ cmake -H. -Bbuild
...
$ cmake --build build --target install -- DESTDIR=install
Scanning dependencies of target app
[ 50%] Building CXX object CMakeFiles/app.dir/main.cpp.o
[100%] Linking CXX executable app
[100%] Built target app
Install the project...
-- Install configuration: ""
-- Installing: install/usr/local/bin/app
-- Installing: install/usr/local/lib/cmake/foo/FooTargets.cmake
-- Installing: install/usr/local/lib/cmake/foo/FooTargets-noconfig.cmake
Scanning dependencies of target doxygen
Hello Doxygen
Built target doxygen
...