| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- #
- # Wrapping
- #
- PROJECT (CustomCommand)
- #
- # Lib and exe path
- #
- SET (LIBRARY_OUTPUT_PATH
- ${PROJECT_BINARY_DIR}/bin/ CACHE PATH
- "Single output directory for building all libraries.")
- SET (EXECUTABLE_OUTPUT_PATH
- ${PROJECT_BINARY_DIR}/bin/ CACHE PATH
- "Single output directory for building all executables.")
- ################################################################
- #
- # First test using a compiled generator to create a .c file
- #
- ################################################################
- # add the executable that will generate the file
- ADD_EXECUTABLE(generator generator.cxx)
- GET_TARGET_PROPERTY(generator_PATH generator LOCATION)
- MESSAGE("Location ${generator_PATH}")
- # the folowing assumes that a cmSourceFile
- # is instantiated for the output, with GENERATED 1
- # at the end of the day this becomes a what in VS ?
- ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
- DEPENDS generator
- COMMAND ${generator_PATH}
- ARGS ${PROJECT_BINARY_DIR}/generated.c
- )
- ################################################################
- #
- # Test using a wrapper to wrap a header file
- #
- ################################################################
- # add the executable that will generate the file
- ADD_EXECUTABLE(wrapper wrapper.cxx)
- # the following assumes that a cmSourceFile
- # is instantiated for the output, with GENERATED 1
- # at the end of the day this becomes a what in VS ?
- ADD_CUSTOM_COMMAND(
- OUTPUT ${PROJECT_BINARY_DIR}/wrapped.c
- DEPENDS wrapper
- MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/wrapped.h
- COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/wrapper
- ARGS ${PROJECT_BINARY_DIR}/wrapped.c ${PROJECT_SOURCE_DIR}/wrapped.h
- )
- ################################################################
- #
- # Test creating files from a custom target
- #
- ################################################################
- ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.dvi
- DEPENDS ${PROJECT_SOURCE_DIR}/doc1.tex
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy ${PROJECT_SOURCE_DIR}/doc1.tex
- ${PROJECT_BINARY_DIR}/doc1.dvi
- )
- ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h
- DEPENDS ${PROJECT_BINARY_DIR}/doc1.dvi
- COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.dvi
- ${PROJECT_BINARY_DIR}/doc1temp.h
- COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1temp.h
- ${PROJECT_BINARY_DIR}/doc1.h
- )
- ADD_CUSTOM_TARGET(TDocument ALL
- COMMAND ${CMAKE_COMMAND} -E echo "Copying doc1.h to doc2.h."
- COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.h
- ${PROJECT_BINARY_DIR}/doc2.h
- DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
- )
- ################################################################
- #
- # Test using a multistep generated file
- #
- ################################################################
- ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
- DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in
- ${PROJECT_BINARY_DIR}/foo.pre
- )
- ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
- DEPENDS ${PROJECT_BINARY_DIR}/foo.pre
- COMMAND ${CMAKE_COMMAND}
- ARGS -E copy ${PROJECT_BINARY_DIR}/foo.pre
- ${PROJECT_BINARY_DIR}/foo.c
- )
- SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/foo.c PROPERTIES
- OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/doc1.h)
- # add the library
- ADD_EXECUTABLE(CustomCommand
- ${PROJECT_BINARY_DIR}/foo.c
- ${PROJECT_BINARY_DIR}/wrapped.c
- ${PROJECT_BINARY_DIR}/generated.c
- )
- # must add a dependency on TDocument otherwise it might never build and
- # the CustomCommand executable really needs doc1.h
- ADD_DEPENDENCIES(CustomCommand TDocument)
|