[CMake] FILE command in make_custom_target
Pau Garcia i Quiles
pgquiles at elpauer.org
Mon Jun 18 07:39:25 EDT 2007
Quoting Philippe Fremy <phil at freehackers.org>:
>
> Hi,
>
> I want a directory to be built when a custom target is executed.
>
> I tried something like this:
>
> add_custom_target(
> doc_libyzis
> COMMAND FILE( MAKE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../apidoc )
> COMMAND ${DOXYGEN} libyzis.doxy
> WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
> COMMENT "Building libyzis api documentation"
> )
>
>
>
> and several variation but none would work.
>
> Then I thought that I should make the directory creation a rule, with my
> custom target depending on it. But to create a new rule, I need
> add_custom_command and I am back to square 1.
>
> Is there any way to achieve what I want ?
Try this macro:
# Create a "make doc" target using Doxygen
# Prototype:
# GENERATE_DOCUMENTATION(doxygen_config_file)
# Parameters:
# doxygen_config_file Doxygen configuration file (must in the
root of the source directory)
MACRO(GENERATE_DOCUMENTATION DOXYGEN_CONFIG_FILE)
FIND_PACKAGE(Doxygen)
SET(DOXYFILE_FOUND false)
IF(EXISTS ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE})
SET(DOXYFILE_FOUND true)
ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE})
IF( DOXYGEN_FOUND )
IF( DOXYFILE_FOUND )
# Add target
ADD_CUSTOM_TARGET( doc ALL ${DOXYGEN_EXECUTABLE}
"${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE}" )
# Add .tag file and generated documentation to the list of
files we must erase when distcleaning
# Read doxygen configuration file
FILE( READ ${PROJECT_SOURCE_DIR}/${DOXYGEN_CONFIG_FILE}
DOXYFILE_CONTENTS )
STRING( REGEX REPLACE "\n" ";" DOXYFILE_LINES ${DOXYFILE_CONTENTS} )
# Parse .tag filename and add to list of files to delete if it exists
FOREACH( DOXYLINE ${DOXYFILE_CONTENTS} )
STRING( REGEX REPLACE ".*GENERATE_TAGFILE *= *([^
^\n]+).*" "\\1" DOXYGEN_TAG_FILE ${DOXYLINE} )
ENDFOREACH( DOXYLINE )
ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_TAG_FILE} )
# Parse doxygen output doc dir and add to list of files to
delete if it exists
FOREACH( DOXYLINE ${DOXYFILE_CONTENTS} )
STRING( REGEX REPLACE ".*OUTPUT_DIRECTORY *= *([^
^\n]+).*" "\\1" DOXYGEN_DOC_DIR ${DOXYLINE} )
ENDFOREACH( DOXYLINE )
ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_DOC_DIR} )
ADD_TO_DISTCLEAN( ${PROJECT_BINARY_DIR}/${DOXYGEN_DOC_DIR}.dir )
ELSE( DOXYFILE_FOUND )
MESSAGE( STATUS "Doxygen configuration file not found -
Documentation will not be generated" )
ENDIF( DOXYFILE_FOUND )
ELSE(DOXYGEN_FOUND)
MESSAGE(STATUS "Doxygen not found - Documentation will not be generated")
ENDIF(DOXYGEN_FOUND)
ENDMACRO(GENERATE_DOCUMENTATION)
--
Pau Garcia i Quiles
http://www.elpauer.org
(Due to the amount of work, I usually need 10 days to answer)
More information about the CMake
mailing list