From 3b07ec631db67e2e44d9f39fb7727a2dafd07b6a Mon Sep 17 00:00:00 2001 From: Chen Linxuan Date: Tue, 30 Jan 2024 14:11:32 +0800 Subject: add_custom_command: Allow adding build event via ALIAS target Signed-off-by: Chen Linxuan --- Help/command/add_custom_command.rst | 3 +++ Help/release/dev/add_custom_command-target-alias.rst | 5 +++++ Source/cmMakefile.cxx | 10 ++++++++-- Tests/CustomCommand/CMakeLists.txt | 4 +++- 4 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 Help/release/dev/add_custom_command-target-alias.rst diff --git a/Help/command/add_custom_command.rst b/Help/command/add_custom_command.rst index 2bb1390..5996d64 100644 --- a/Help/command/add_custom_command.rst +++ b/Help/command/add_custom_command.rst @@ -554,6 +554,9 @@ one of the keywords to make clear the behavior they expect. .. versionadded:: 3.21 Support for target-dependent generator expressions. +.. versionadded:: 3.29 + The ```` may be an :ref:`ALIAS target `. + Examples: Build Events ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/Help/release/dev/add_custom_command-target-alias.rst b/Help/release/dev/add_custom_command-target-alias.rst new file mode 100644 index 0000000..7646a53 --- /dev/null +++ b/Help/release/dev/add_custom_command-target-alias.rst @@ -0,0 +1,5 @@ +add_custom_command-target-alias +------------------------------- + +* The :ref:`add_custom_command(TARGET) ` + signature now supports adding build events through :ref:`Alias Targets`. diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index 2687afa..509f28b 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -1144,9 +1144,15 @@ cmTarget* cmMakefile::GetCustomCommandTarget( const std::string& target, cmObjectLibraryCommands objLibCommands, const cmListFileBacktrace& lfbt) const { - // Find the target to which to add the custom command. - auto ti = this->Targets.find(target); + auto realTarget = target; + auto ai = this->AliasTargets.find(target); + if (ai != this->AliasTargets.end()) { + realTarget = ai->second; + } + + // Find the target to which to add the custom command. + auto ti = this->Targets.find(realTarget); if (ti == this->Targets.end()) { MessageType messageType = MessageType::AUTHOR_WARNING; bool issueMessage = false; diff --git a/Tests/CustomCommand/CMakeLists.txt b/Tests/CustomCommand/CMakeLists.txt index 25df300..d46ee08 100644 --- a/Tests/CustomCommand/CMakeLists.txt +++ b/Tests/CustomCommand/CMakeLists.txt @@ -214,11 +214,13 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/generated_extern.cxx add_executable(CustomCommandUsingTargetTest main.cxx ${CMAKE_CURRENT_BINARY_DIR}/generated_extern.cxx ) +add_executable(CustomCommandUsingTargetTestAlias ALIAS CustomCommandUsingTargetTest ) + add_custom_target(RunTarget COMMAND generator_extern ${CMAKE_CURRENT_BINARY_DIR}/run_target.cxx ) -add_custom_command(TARGET CustomCommandUsingTargetTest POST_BUILD +add_custom_command(TARGET CustomCommandUsingTargetTestAlias POST_BUILD COMMAND dummy_generator ${CMAKE_CURRENT_BINARY_DIR}/generated_dummy.cxx) add_subdirectory(GeneratorInExtraDir) -- cgit v0.12