[CMake] Custom build step

pepone.onrez pepone.onrez at gmail.com
Sat Jan 19 04:23:10 EST 2008


Hello i creating a CMake macro for compile same IDL files.

Here is steps i trying to do

1) find all files in  ./slice directory that's end with .ice

for each .ice files

1.1) run slice2cpp compiler that's generate a .h and .cpp file white the
same name as the .ice
1.2) move the .h file to the include directory
1.3) move the .cpp file to the source directory

2) Compile the generated files in a shared library

Here is the macro i use for steps (1.1 1.2 1.3) - the problem is that the
second CUSTOM_COMMAND that's move generated files
to is final destination is not called. Any help is appreciated , thanks in
advance


SET ( SLICE2CPP_COMMAND ${ICE_HOME}/bin/slice2cpp${EXE_EXTENSION} )
SET ( SLICE_SOURCE_DIR ${PROJECT_SOURCE_DIR}/slice )
SET ( SLICE2CPP_GENERATED_SOURCES ${PROJECT_SOURCE_DIR}/src )
SET ( SLICE2CPP_GENERATED_HEADERS ${PROJECT_SOURCE_DIR}/include )
SET ( MOVE_FILE_COMMAND mv )

SET ( SLICE_ARGS -I${SLICE_SOURCE_DIR} -I${ICE_SLICE_HOME}/slice)

#
# Appends the new_bit to the original.
# If the original is not set, it will be set to the new_bit.
#
MACRO( APPEND ORIGINAL NEW_BIT )

  IF    ( NOT ${ORIGINAL} )
    SET( ${ORIGINAL} ${NEW_BIT} )
  ELSE  ( NOT ${ORIGINAL} )
    SET( ${ORIGINAL} ${${ORIGINAL}} ${NEW_BIT} )
  ENDIF ( NOT ${ORIGINAL} )

ENDMACRO( APPEND ORIGINAL NEW_BIT )

#
# Generate rules for buil slice files.
#
MACRO ( GENERATE_SLICE2CPP_RULES GENERATED_CPP_LIST GENERATED_HEADER_LIST )

    FOREACH( SLICE_SOURCE_BASENAME ${ARGN} )
        APPEND( GEN_SLICE_RULES_SLICE_DEPENDS
"${SLICE_SOURCE_DIR}/${PROJECT_NAMESPACE}/${SLICE_SOURCE_BASENAME}" )
    ENDFOREACH( SLICE_SOURCE_BASENAME ${ARGN} )


    FOREACH( SLICE_SOURCE_BASENAME ${ARGN} )
        SET( SLICE_SOURCE
"${SLICE_SOURCE_DIR}/${PROJECT_NAMESPACE}/${SLICE_SOURCE_BASENAME}" )

        STRING( REGEX REPLACE "\\.ice" .cpp SOURCE_OUTPUT_BASENAME
"${SLICE_SOURCE_BASENAME}" )
        STRING( REGEX REPLACE "\\.ice" .h HEADER_OUTPUT_BASENAME
"${SLICE_SOURCE_BASENAME}" )

        ADD_CUSTOM_COMMAND(
            OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_OUTPUT_BASENAME}
${CMAKE_CURRENT_BINARY_DIR}/${HEADER_OUTPUT_BASENAME}
            COMMAND ${SLICE2CPP_COMMAND}
            ARGS    ${SLICE_SOURCE} ${SLICE_ARGS}
            COMMENT "-- Generating ${SOURCE_OUTPUT_BASENAME}
${HEADER_OUTPUT_BASENAME} file from ${SLICE_SOURCE}")

        ADD_CUSTOM_COMMAND(
            OUTPUT  ${PROJECT_SOURCE_DIR}/src/${SOURCE_OUTPUT_BASENAME}
            DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_OUTPUT_BASENAME}
            COMMAND ${MOVE_FILE_COMMAND}
            ARGS    ${CMAKE_CURRENT_BINARY_DIR}/${SOURCE_OUTPUT_BASENAME}
${PROJECT_SOURCE_DIR}/src
            COMMENT "-- Moving ${SOURCE_OUTPUT_BASENAME} to sources dir
${PROJECT_SOURCE_DIR}/src")

        APPEND ( "${GENERATED_CPP_LIST}"
"${PROJECT_SOURCE_DIR}/src/${SOURCE_OUTPUT_BASENAME}" )
        APPEND ( "${GENERATED_HEADER_LIST}" "include/${PROJECT_NAMESPACE}" )

    ENDFOREACH( SLICE_SOURCE_BASENAME ${ARGN} )

ENDMACRO ( GENERATE_SLICE2CPP_RULES GENERATED_CPP_LIST GENERATED_HEADER_LIST
)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20080119/a77ec089/attachment-0001.html


More information about the CMake mailing list