diff options
Diffstat (limited to 'cmake/DefCmdTarget.cmake')
-rw-r--r-- | cmake/DefCmdTarget.cmake | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/cmake/DefCmdTarget.cmake b/cmake/DefCmdTarget.cmake new file mode 100644 index 0000000000..1ee5cdd60e --- /dev/null +++ b/cmake/DefCmdTarget.cmake @@ -0,0 +1,27 @@ +# Defines a target named ${target} and a command with (symbolic) output +# ${target}-cmd. If ${prg} is undefined the target prints "not found". +# +# - Use add_custom_command(…APPEND) to build the command after this. +# - Use add_custom_target(…DEPENDS) to run the command from a target. +function(def_cmd_target target prg prg_name prg_fatal) + # Define a mostly-empty command, which can be appended-to. + add_custom_command(OUTPUT ${target}-cmd + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND ${CMAKE_COMMAND} -E echo "${target}" + ) + # Symbolic (does not generate an artifact). + set_source_files_properties(${target}-cmd PROPERTIES SYMBOLIC "true") + + if(prg OR NOT prg_fatal) + add_custom_target(${target} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${target}-cmd) + if(NOT prg) + add_custom_command(OUTPUT ${target}-cmd APPEND + COMMAND ${CMAKE_COMMAND} -E echo "${target}: SKIP: ${prg_name} not found") + endif() + else() + add_custom_target(${target} false + COMMENT "${target}: ${prg_name} not found") + endif() +endfunction() |