[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