| enable_language(C) | |
| add_executable(echo echo.c) | |
| add_custom_command( | |
| OUTPUT echo_raw_$<CONFIG>.txt | |
| COMMAND echo $<CONFIG> echo_raw_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_genex_$<IF:$<CONFIG:Debug>,Debug,$<IF:$<CONFIG:Release>,Release,$<IF:$<CONFIG:MinSizeRel>,MinSizeRel,RelWithDebInfo>>>.txt | |
| COMMAND $<TARGET_FILE:echo> $<COMMAND_CONFIG:$<CONFIG>> echo_genex_$<OUTPUT_CONFIG:$<CONFIG>>.txt | |
| WORKING_DIRECTORY $<OUTPUT_CONFIG:$<CONFIG>> | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_genex_out_$<CONFIG>.txt | |
| COMMAND $<OUTPUT_CONFIG:$<TARGET_FILE:echo>> $<CONFIG> echo_genex_out_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<COMMAND_CONFIG:$<CONFIG>> | |
| ) | |
| add_custom_command( | |
| OUTPUT depend_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo depend_$<CONFIG>.txt | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_depend_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_depend_$<CONFIG>.txt | |
| DEPENDS depend_$<CONFIG>.txt | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_depend_out_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_depend_out_$<CONFIG>.txt | |
| DEPENDS $<OUTPUT_CONFIG:depend_$<CONFIG>.txt> | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_depend_cmd_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_depend_cmd_$<CONFIG>.txt | |
| DEPENDS $<COMMAND_CONFIG:depend_$<CONFIG>.txt> | |
| ) | |
| add_custom_command( | |
| OUTPUT depend_echo_raw_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo depend_echo_raw_$<CONFIG>.txt | |
| DEPENDS echo | |
| ) | |
| add_custom_command( | |
| OUTPUT depend_echo_genex_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_$<CONFIG>.txt | |
| DEPENDS $<TARGET_FILE:echo> | |
| ) | |
| add_custom_command( | |
| OUTPUT depend_echo_genex_out_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_out_$<CONFIG>.txt | |
| DEPENDS $<OUTPUT_CONFIG:$<TARGET_FILE:echo>> | |
| ) | |
| add_custom_command( | |
| OUTPUT depend_echo_genex_cmd_$<CONFIG>.txt | |
| COMMAND ${CMAKE_COMMAND} -E echo depend_echo_genex_cmd_$<CONFIG>.txt | |
| DEPENDS $<COMMAND_CONFIG:$<TARGET_FILE:echo>> | |
| ) | |
| # An OUTPUT that is not per-config prevents cross-config generation. | |
| add_custom_command( | |
| OUTPUT echo_no_cross_output.txt echo_no_cross_output_$<CONFIG>.txt | |
| COMMAND echo $<CONFIG> echo_no_cross_output_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_no_cross_output_$<IF:$<CONFIG:Debug>,a,b>.txt echo_no_cross_output_if_$<CONFIG>.txt | |
| COMMAND echo $<CONFIG> echo_no_cross_output_if_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| # BYPRODUCTS that are not per-config prevent cross-config generation. | |
| add_custom_command( | |
| OUTPUT echo_no_cross_byproduct_$<CONFIG>.txt | |
| BYPRODUCTS echo_no_cross_byproduct.txt | |
| COMMAND echo $<CONFIG> echo_no_cross_byproduct_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| add_custom_command( | |
| OUTPUT echo_no_cross_byproduct_if_$<CONFIG>.txt | |
| BYPRODUCTS echo_no_cross_byproduct_$<IF:$<CONFIG:Debug>,a,b>.txt | |
| COMMAND echo $<CONFIG> echo_no_cross_byproduct_if_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| foreach(case | |
| echo_raw | |
| echo_genex | |
| echo_genex_out | |
| echo_depend | |
| echo_depend_out | |
| echo_depend_cmd | |
| depend | |
| depend_echo_raw | |
| depend_echo_genex | |
| depend_echo_genex_out | |
| depend_echo_genex_cmd | |
| echo_no_cross_output | |
| echo_no_cross_output_if | |
| echo_no_cross_byproduct | |
| echo_no_cross_byproduct_if | |
| ) | |
| set_property(SOURCE | |
| ${CMAKE_CURRENT_BINARY_DIR}/${case}_Debug.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/${case}_Release.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/${case}_MinSizeRel.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/${case}_RelWithDebInfo.txt | |
| PROPERTY SYMBOLIC 1) | |
| add_custom_target(${case} DEPENDS ${case}_$<CONFIG>.txt) | |
| endforeach() | |
| # An OUTPUT in only one configuration. | |
| add_custom_command( | |
| OUTPUT "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>" | |
| COMMAND echo $<CONFIG> "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>" | |
| ) | |
| set_property(SOURCE ${CMAKE_CURRENT_BINARY_DIR}/echo_dbg_Debug.txt PROPERTY SYMBOLIC 1) | |
| add_custom_target(echo_dbg DEPENDS "$<$<CONFIG:Debug>:echo_dbg_Debug.txt>") | |
| # An OUTPUT in only one configuration with BYPRODUCTS in every configuration. | |
| add_custom_command( | |
| OUTPUT "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>" | |
| BYPRODUCTS echo_dbgx_byproduct_$<CONFIG>.txt | |
| COMMAND echo $<CONFIG> "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>" echo_dbgx_byproduct_$<CONFIG>.txt | |
| COMMAND_EXPAND_LISTS | |
| ) | |
| set_property(SOURCE | |
| ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_Debug.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_Debug.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_Release.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_MinSizeRel.txt | |
| ${CMAKE_CURRENT_BINARY_DIR}/echo_dbgx_byproduct_RelWithDebInfo.txt | |
| PROPERTY SYMBOLIC 1) | |
| add_custom_target(echo_dbgx DEPENDS "$<$<CONFIG:Debug>:echo_dbgx_Debug.txt>") | |
| # A non-cross-config custom command expresses target dependencies in command config. | |
| add_custom_command( | |
| OUTPUT echo_depend_target.txt | |
| COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:echo> $<CONFIG> | |
| # A real project should do: | |
| # DEPENDS $<TARGET_FILE:echo> | |
| # but here we are testing the target-level dependency implied by TARGET_FILE. | |
| ) | |
| add_custom_target(echo_depend_target DEPENDS echo_depend_target.txt) | |
| add_custom_target(echo_target_raw | |
| BYPRODUCTS echo_target_raw_$<CONFIG>.txt | |
| COMMENT echo_target_raw | |
| COMMAND echo $<CONFIG> echo_target_raw_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| add_custom_target(echo_target_genex | |
| BYPRODUCTS echo_target_genex_$<CONFIG>.txt | |
| COMMENT echo_target_genex | |
| COMMAND $<TARGET_FILE:echo> $<COMMAND_CONFIG:$<CONFIG>> echo_target_genex_$<OUTPUT_CONFIG:$<CONFIG>>.txt | |
| WORKING_DIRECTORY $<OUTPUT_CONFIG:$<CONFIG>> | |
| ) | |
| add_custom_target(echo_target_genex_out | |
| BYPRODUCTS echo_target_genex_out_$<CONFIG>.txt | |
| COMMENT echo_target_genex_out | |
| COMMAND $<OUTPUT_CONFIG:$<TARGET_FILE:echo>> $<CONFIG> echo_target_genex_out_$<CONFIG>.txt | |
| WORKING_DIRECTORY $<COMMAND_CONFIG:$<CONFIG>> | |
| ) | |
| add_custom_target(echo_target_depend | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_$<CONFIG>.txt | |
| DEPENDS depend_$<CONFIG>.txt | |
| COMMENT echo_target_depend | |
| ) | |
| add_custom_target(echo_target_depend_out | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_out_$<CONFIG>.txt | |
| DEPENDS $<OUTPUT_CONFIG:depend_$<CONFIG>.txt> | |
| COMMENT echo_target_depend_out | |
| ) | |
| add_custom_target(echo_target_depend_cmd | |
| COMMAND ${CMAKE_COMMAND} -E echo echo_target_depend_cmd_$<CONFIG>.txt | |
| DEPENDS $<COMMAND_CONFIG:depend_$<CONFIG>.txt> | |
| COMMENT echo_target_depend_cmd | |
| ) | |
| # BYPRODUCTS that are not per-config block cross-configs. | |
| add_custom_target(target_no_cross_byproduct | |
| BYPRODUCTS target_no_cross_byproduct.txt | |
| COMMENT target_no_cross_byproduct | |
| COMMAND echo $<CONFIG> target_no_cross_byproduct.txt | |
| WORKING_DIRECTORY $<CONFIG> | |
| ) | |
| add_custom_target(target_post_build | |
| COMMENT target_post_build | |
| COMMAND ${CMAKE_COMMAND} -E echo "target main build" | |
| ) | |
| add_custom_command(TARGET target_post_build POST_BUILD | |
| COMMAND ${CMAKE_COMMAND} -E echo "target post build" | |
| ) |