mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-08 14:50:10 -06:00
Ninja: Fix dupbuild error skipping alias with conflicting custom command
See-also: https://issues.slicer.org/view.php?id=4595 Reported-by: Isaiah Norton <inorton@bwh.harvard.edu>
This commit is contained in:
@@ -1112,6 +1112,12 @@ void cmGlobalNinjaGenerator::WriteTargetAliases(std::ostream& os)
|
||||
continue;
|
||||
}
|
||||
|
||||
// Don't write alias if there is a already a custom command with
|
||||
// matching output
|
||||
if (this->HasCustomCommandOutput(ta.first)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
cmNinjaDeps deps;
|
||||
this->AppendTargetOutputs(ta.second, deps);
|
||||
|
||||
|
||||
41
Tests/RunCMake/Ninja/PreventTargetAliasesDupBuildRule.cmake
Normal file
41
Tests/RunCMake/Ninja/PreventTargetAliasesDupBuildRule.cmake
Normal file
@@ -0,0 +1,41 @@
|
||||
cmake_minimum_required(VERSION 3.12)
|
||||
project(Test LANGUAGES C)
|
||||
|
||||
# fake launcher executable
|
||||
set(input_launcher_executable ${CMAKE_CURRENT_BINARY_DIR}/fake_launcher_executable)
|
||||
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/fake_launcher_executable "")
|
||||
|
||||
# application and executable name
|
||||
set(application_target "HelloApp")
|
||||
set(application_name "Hello")
|
||||
set(executable_name "Hello")
|
||||
|
||||
# target built in "<root>/bin"
|
||||
add_executable(${application_target} hello.c)
|
||||
set_target_properties(${application_target} PROPERTIES
|
||||
OUTPUT_NAME ${executable_name}
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin
|
||||
)
|
||||
|
||||
# configured launcher in "<root>"
|
||||
set(configured_launcher_executable "${CMAKE_CURRENT_BINARY_DIR}/${application_name}")
|
||||
|
||||
# create command to copy the launcher
|
||||
add_custom_command(
|
||||
DEPENDS
|
||||
${input_launcher_executable}
|
||||
OUTPUT
|
||||
${configured_launcher_executable}
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E copy ${input_launcher_executable} ${configured_launcher_executable}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
COMMENT
|
||||
"Configuring application launcher: ${application_name}"
|
||||
)
|
||||
|
||||
add_custom_target(Configure${application_name}Launcher ALL
|
||||
DEPENDS
|
||||
${application_target}
|
||||
${input_launcher_executable}
|
||||
${configured_launcher_executable}
|
||||
)
|
||||
@@ -278,3 +278,10 @@ foreach(ninja_output_path_prefix "sub space" "sub")
|
||||
run_sub_cmake(SubDirPrefix "${ninja_output_path_prefix}")
|
||||
run_sub_cmake(CustomCommandWorkingDirectory "${ninja_output_path_prefix}")
|
||||
endforeach(ninja_output_path_prefix)
|
||||
|
||||
function (run_PreventTargetAliasesDupBuildRule)
|
||||
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/PreventTargetAliasesDupBuildRule-build)
|
||||
run_cmake(PreventTargetAliasesDupBuildRule)
|
||||
run_ninja("${RunCMake_TEST_BINARY_DIR}" -w dupbuild=err)
|
||||
endfunction ()
|
||||
run_PreventTargetAliasesDupBuildRule()
|
||||
|
||||
Reference in New Issue
Block a user