CMakeLists.txt 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. # the folowing assumes that a cmSourceFile
  22. # is instantiated for the output, with GENERATED 1
  23. # at the end of the day this becomes a what in VS ?
  24. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
  25. DEPENDS generator
  26. COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/generator
  27. ARGS ${PROJECT_BINARY_DIR}/generated.c
  28. )
  29. ################################################################
  30. #
  31. # Test using a wrapper to wrap a header file
  32. #
  33. ################################################################
  34. # add the executable that will generate the file
  35. ADD_EXECUTABLE(wrapper wrapper.cxx)
  36. # the following assumes that a cmSourceFile
  37. # is instantiated for the output, with GENERATED 1
  38. # at the end of the day this becomes a what in VS ?
  39. ADD_CUSTOM_COMMAND(
  40. OUTPUT ${PROJECT_BINARY_DIR}/wrapped.c
  41. DEPENDS wrapper
  42. MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/wrapped.h
  43. COMMAND ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/wrapper
  44. ARGS ${PROJECT_BINARY_DIR}/wrapped.c ${PROJECT_SOURCE_DIR}/wrapped.h
  45. )
  46. ################################################################
  47. #
  48. # Test creating files from a custom target
  49. #
  50. ################################################################
  51. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.dvi
  52. DEPENDS ${PROJECT_SOURCE_DIR}/doc1.tex
  53. COMMAND ${CMAKE_COMMAND}
  54. ARGS -E copy ${PROJECT_SOURCE_DIR}/doc1.tex
  55. ${PROJECT_BINARY_DIR}/doc1.dvi
  56. )
  57. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/doc1.h
  58. DEPENDS ${PROJECT_BINARY_DIR}/doc1.dvi
  59. COMMAND ${CMAKE_COMMAND}
  60. ARGS -E copy ${PROJECT_BINARY_DIR}/doc1.dvi
  61. ${PROJECT_BINARY_DIR}/doc1.h
  62. )
  63. ADD_CUSTOM_TARGET(TDocument ALL
  64. ${CMAKE_COMMAND} -E echo "building doc1.h"
  65. DEPENDS ${PROJECT_BINARY_DIR}/doc1.h
  66. )
  67. ################################################################
  68. #
  69. # Test using a multistep generated file
  70. #
  71. ################################################################
  72. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
  73. DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
  74. COMMAND ${CMAKE_COMMAND}
  75. ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in
  76. ${PROJECT_BINARY_DIR}/foo.pre
  77. )
  78. ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.c
  79. DEPENDS TDocument ${PROJECT_BINARY_DIR}/foo.pre
  80. COMMAND ${CMAKE_COMMAND}
  81. ARGS -E copy ${PROJECT_BINARY_DIR}/foo.pre
  82. ${PROJECT_BINARY_DIR}/foo.c
  83. )
  84. # add the library
  85. ADD_EXECUTABLE(CustomCommand
  86. ${PROJECT_BINARY_DIR}/foo.c
  87. ${PROJECT_BINARY_DIR}/wrapped.c
  88. ${PROJECT_BINARY_DIR}/generated.c
  89. )
  90. # must add a dependency on TDocument otherwise it might never build and
  91. # the CustomCommand executable really needs doc1.h
  92. ADD_DEPENDENCIES(CustomCommand TDocument)