CustomCommandOutputGenex.cmake 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. enable_language(C)
  2. add_executable(echo echo.c)
  3. add_custom_command(
  4. OUTPUT echo_raw_$<CONFIG>.txt
  5. COMMAND echo $<CONFIG> echo_raw_$<CONFIG>.txt
  6. WORKING_DIRECTORY $<CONFIG>
  7. )
  8. add_custom_command(
  9. OUTPUT echo_genex_$<IF:$<CONFIG:Debug>,Debug,$<IF:$<CONFIG:Release>,Release,$<IF:$<CONFIG:MinSizeRel>,MinSizeRel,RelWithDebInfo>>>.txt
  10. COMMAND $<TARGET_FILE:echo> $<COMMAND_CONFIG:$<CONFIG>> echo_genex_$<OUTPUT_CONFIG:$<CONFIG>>.txt
  11. WORKING_DIRECTORY $<OUTPUT_CONFIG:$<CONFIG>>
  12. )
  13. add_custom_command(
  14. OUTPUT echo_genex_out_$<CONFIG>.txt
  15. COMMAND $<OUTPUT_CONFIG:$<TARGET_FILE:echo>> $<CONFIG> echo_genex_out_$<CONFIG>.txt
  16. WORKING_DIRECTORY $<COMMAND_CONFIG:$<CONFIG>>
  17. )
  18. add_custom_command(
  19. OUTPUT depend_$<CONFIG>.txt
  20. COMMAND ${CMAKE_COMMAND} -E echo depend_$<CONFIG>.txt
  21. )
  22. add_custom_command(
  23. OUTPUT echo_depend_$<CONFIG>.txt
  24. COMMAND ${CMAKE_COMMAND} -E echo echo_depend_$<CONFIG>.txt
  25. DEPENDS depend_$<CONFIG>.txt
  26. )
  27. add_custom_command(
  28. OUTPUT echo_depend_out_$<CONFIG>.txt
  29. COMMAND ${CMAKE_COMMAND} -E echo echo_depend_out_$<CONFIG>.txt
  30. DEPENDS $<OUTPUT_CONFIG:depend_$<CONFIG>.txt>
  31. )
  32. add_custom_command(
  33. OUTPUT echo_depend_cmd_$<CONFIG>.txt
  34. COMMAND ${CMAKE_COMMAND} -E echo echo_depend_cmd_$<CONFIG>.txt
  35. DEPENDS $<COMMAND_CONFIG:depend_$<CONFIG>.txt>
  36. )
  37. add_custom_command(
  38. OUTPUT depend_echo_raw_$<CONFIG>.txt
  39. COMMAND ${CMAKE_COMMAND} -E echo depend_echo_raw_$<CONFIG>.txt
  40. DEPENDS echo
  41. )
  42. add_custom_command(
  43. OUTPUT depend_echo_genex_$<CONFIG>.txt
  44. COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_$<CONFIG>.txt
  45. DEPENDS $<TARGET_FILE:echo>
  46. )
  47. add_custom_command(
  48. OUTPUT depend_echo_genex_out_$<CONFIG>.txt
  49. COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_out_$<CONFIG>.txt
  50. DEPENDS $<OUTPUT_CONFIG:$<TARGET_FILE:echo>>
  51. )
  52. add_custom_command(
  53. OUTPUT depend_echo_genex_cmd_$<CONFIG>.txt
  54. COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_cmd_$<CONFIG>.txt
  55. DEPENDS $<COMMAND_CONFIG:$<TARGET_FILE:echo>>
  56. )
  57. # An OUTPUT that is not per-config prevents cross-config generation.
  58. add_custom_command(
  59. OUTPUT echo_no_cross_output.txt echo_no_cross_output_$<CONFIG>.txt
  60. COMMAND echo $<CONFIG> echo_no_cross_output_$<CONFIG>.txt
  61. WORKING_DIRECTORY $<CONFIG>
  62. )
  63. add_custom_command(
  64. OUTPUT echo_no_cross_output_$<IF:$<CONFIG:Debug>,a,b>.txt echo_no_cross_output_if_$<CONFIG>.txt
  65. COMMAND echo $<CONFIG> echo_no_cross_output_if_$<CONFIG>.txt
  66. WORKING_DIRECTORY $<CONFIG>
  67. )
  68. # BYPRODUCTS that are not per-config prevent cross-config generation.
  69. add_custom_command(
  70. OUTPUT echo_no_cross_byproduct_$<CONFIG>.txt
  71. BYPRODUCTS echo_no_cross_byproduct.txt
  72. COMMAND echo $<CONFIG> echo_no_cross_byproduct_$<CONFIG>.txt
  73. WORKING_DIRECTORY $<CONFIG>
  74. )
  75. add_custom_command(
  76. OUTPUT echo_no_cross_byproduct_if_$<CONFIG>.txt
  77. BYPRODUCTS echo_no_cross_byproduct_$<IF:$<CONFIG:Debug>,a,b>.txt
  78. COMMAND echo $<CONFIG> echo_no_cross_byproduct_if_$<CONFIG>.txt
  79. WORKING_DIRECTORY $<CONFIG>
  80. )
  81. foreach(case
  82. echo_raw
  83. echo_genex
  84. echo_genex_out
  85. echo_depend
  86. echo_depend_out
  87. echo_depend_cmd
  88. depend
  89. depend_echo_raw
  90. depend_echo_genex
  91. depend_echo_genex_out
  92. depend_echo_genex_cmd
  93. echo_no_cross_output
  94. echo_no_cross_output_if
  95. echo_no_cross_byproduct
  96. echo_no_cross_byproduct_if
  97. )
  98. set_property(SOURCE
  99. ${CMAKE_CURRENT_BINARY_DIR}/${case}_Debug.txt
  100. ${CMAKE_CURRENT_BINARY_DIR}/${case}_Release.txt
  101. ${CMAKE_CURRENT_BINARY_DIR}/${case}_MinSizeRel.txt
  102. ${CMAKE_CURRENT_BINARY_DIR}/${case}_RelWithDebInfo.txt
  103. PROPERTY SYMBOLIC 1)
  104. add_custom_target(${case} DEPENDS ${case}_$<CONFIG>.txt)
  105. endforeach()
  106. # An OUTPUT in only one configuration.
  107. add_custom_command(
  108. OUTPUT "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>"
  109. COMMAND echo $<CONFIG> "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>"
  110. )
  111. set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/echo_dbg_Debug.txt PROPERTY SYMBOLIC 1)
  112. add_custom_target(echo_dbg DEPENDS "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>")
  113. # An OUTPUT in only one configuration with BYPRODUCTS in every configuration.
  114. add_custom_command(
  115. OUTPUT "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>"
  116. BYPRODUCTS echo_dbgx_byproduct_$<CONFIG>.txt
  117. COMMAND echo $<CONFIG> "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>" echo_dbgx_byproduct_$<CONFIG>.txt
  118. COMMAND_EXPAND_LISTS
  119. )
  120. set_property(SOURCE
  121. ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_Debug.txt
  122. ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_Debug.txt
  123. ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_Release.txt
  124. ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_MinSizeRel.txt
  125. ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_RelWithDebInfo.txt
  126. PROPERTY SYMBOLIC 1)
  127. add_custom_target(echo_dbgx DEPENDS "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>")
  128. add_custom_target(echo_target_raw
  129. BYPRODUCTS echo_target_raw_$<CONFIG>.txt
  130. COMMENT echo_target_raw
  131. COMMAND echo $<CONFIG> echo_target_raw_$<CONFIG>.txt
  132. WORKING_DIRECTORY $<CONFIG>
  133. )
  134. add_custom_target(echo_target_genex
  135. BYPRODUCTS echo_target_genex_$<CONFIG>.txt
  136. COMMENT echo_target_genex
  137. COMMAND $<TARGET_FILE:echo> $<COMMAND_CONFIG:$<CONFIG>> echo_target_genex_$<OUTPUT_CONFIG:$<CONFIG>>.txt
  138. WORKING_DIRECTORY $<OUTPUT_CONFIG:$<CONFIG>>
  139. )
  140. add_custom_target(echo_target_genex_out
  141. BYPRODUCTS echo_target_genex_out_$<CONFIG>.txt
  142. COMMENT echo_target_genex_out
  143. COMMAND $<OUTPUT_CONFIG:$<TARGET_FILE:echo>> $<CONFIG> echo_target_genex_out_$<CONFIG>.txt
  144. WORKING_DIRECTORY $<COMMAND_CONFIG:$<CONFIG>>
  145. )
  146. add_custom_target(echo_target_depend
  147. COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_$<CONFIG>.txt
  148. DEPENDS depend_$<CONFIG>.txt
  149. COMMENT echo_target_depend
  150. )
  151. add_custom_target(echo_target_depend_out
  152. COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_out_$<CONFIG>.txt
  153. DEPENDS $<OUTPUT_CONFIG:depend_$<CONFIG>.txt>
  154. COMMENT echo_target_depend_out
  155. )
  156. add_custom_target(echo_target_depend_cmd
  157. COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_cmd_$<CONFIG>.txt
  158. DEPENDS $<COMMAND_CONFIG:depend_$<CONFIG>.txt>
  159. COMMENT echo_target_depend_cmd
  160. )
  161. # BYPRODUCTS that are not per-config block cross-configs.
  162. add_custom_target(target_no_cross_byproduct
  163. BYPRODUCTS target_no_cross_byproduct.txt
  164. COMMENT target_no_cross_byproduct
  165. COMMAND echo $<CONFIG> target_no_cross_byproduct.txt
  166. WORKING_DIRECTORY $<CONFIG>
  167. )