Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

selectively run doxygen in cmake

Tags:

cmake

doxygen

I've got a CMakeLists.txt file that handles Doxygen generation for a software project. Its contents are:

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

I'd really like to only run doxygen if I'm doing an install build. Is there some straightforward way of communicating that to cmake?

like image 998
user888379 Avatar asked Oct 29 '25 00:10

user888379


1 Answers

First remove the ALL from add_custom_target().

add_custom_target(doc ALL

by

add_custom_target(doc

Then add

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

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

Examples

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;
}

Shell:

$ 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
like image 78
Mizux Avatar answered Nov 01 '25 16:11

Mizux