CMakeLists.txt 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #
  2. # Wrapping
  3. #
  4. PROJECT (CustomCommand)
  5. #
  6. # Lib and exe path
  7. #
  8. SET (LIBRARY_OUTPUT_PATH
  9. ${PROJECT_BINARY_DIR}/bin/ CACHE PATH
  10. "Single output directory for building all libraries.")
  11. SET (EXECUTABLE_OUTPUT_PATH
  12. ${PROJECT_BINARY_DIR}/bin/ CACHE PATH
  13. "Single output directory for building all executables.")
  14. ################################################################
  15. #
  16. # First test using a compiled generator to create a .c file
  17. #
  18. ################################################################
  19. # add the executable that will generate the file
  20. ADD_EXECUTABLE(generator generator.cxx)
  21. GET_TARGET_PROPERTY(generator_PATH generator LOCATION)
  22. MESSAGE("Location ${generator_PATH}")
  23. # the folowing assumes that a cmSourceFile
  24. # is instantiated for the output, with GENERATED 1
  25. # at the end of the day this becomes a what in VS ?
  26. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
  27. DEPENDS generator
  28. COMMAND ${generator_PATH}
  29. ARGS ${PROJECT_BINARY_DIR}/generated.c
  30. )
  31. ################################################################
  32. #
  33. # Test using a wrapper to wrap a header file
  34. #
  35. ################################################################
  36. # add the executable that will generate the file
  37. ADD_EXECUTABLE(wrapper wrapper.cxx)
  38. # the following assumes that a cmSourceFile
  39. # is instantiated for the output, with GENERATED 1
  40. # at the end of the day this becomes a what in VS ?
  41. ADD_CUSTOM_COMMAND(
  42. OUTPUT ${PROJECT_BINARY_DIR}/wrapped.c
  43. DEPENDS wrapper
  44. MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/wrapped.h
  45. COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/wrapper
  46. ARGS ${PROJECT_BINARY_DIR}/wrapped.c ${PROJECT_SOURCE_DIR}/wrapped.h
  47. )
  48. ################################################################
  49. #
  50. # Test creating files from a custom target
  51. #
  52. ################################################################
  53. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.dvi
  54. DEPENDS ${PROJECT_SOURCE_DIR}/doc1.tex
  55. COMMAND ${CMAKE_COMMAND}
  56. ARGS -E copy ${PROJECT_SOURCE_DIR}/doc1.tex
  57. ${PROJECT_BINARY_DIR}/doc1.dvi
  58. )
  59. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h
  60. DEPENDS ${PROJECT_BINARY_DIR}/doc1.dvi
  61. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.dvi
  62. ${PROJECT_BINARY_DIR}/doc1temp.h
  63. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1temp.h
  64. ${PROJECT_BINARY_DIR}/doc1.h
  65. )
  66. ADD_CUSTOM_TARGET(TDocument ALL
  67. COMMAND ${CMAKE_COMMAND} -E echo "Copying doc1.h to doc2.h."
  68. COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_BINARY_DIR}/doc1.h
  69. ${PROJECT_BINARY_DIR}/doc2.h
  70. DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
  71. )
  72. ################################################################
  73. #
  74. # Test using a multistep generated file
  75. #
  76. ################################################################
  77. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
  78. DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
  79. COMMAND ${CMAKE_COMMAND}
  80. ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in
  81. ${PROJECT_BINARY_DIR}/foo.pre
  82. )
  83. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
  84. DEPENDS ${PROJECT_BINARY_DIR}/foo.pre
  85. COMMAND ${CMAKE_COMMAND}
  86. ARGS -E copy ${PROJECT_BINARY_DIR}/foo.pre
  87. ${PROJECT_BINARY_DIR}/foo.c
  88. )
  89. SET_SOURCE_FILES_PROPERTIES(${PROJECT_BINARY_DIR}/foo.c PROPERTIES
  90. OBJECT_DEPENDS ${PROJECT_BINARY_DIR}/doc1.h)
  91. # add the library
  92. ADD_EXECUTABLE(CustomCommand
  93. ${PROJECT_BINARY_DIR}/foo.c
  94. ${PROJECT_BINARY_DIR}/wrapped.c
  95. ${PROJECT_BINARY_DIR}/generated.c
  96. )
  97. # must add a dependency on TDocument otherwise it might never build and
  98. # the CustomCommand executable really needs doc1.h
  99. ADD_DEPENDENCIES(CustomCommand TDocument)