From de13d68d11b9f8f08c67b8cbcdd0f957d5bae6e1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 29 Mar 2013 14:53:36 -0400 Subject: [PATCH] add_dependencies: Distinguish target v. file dependencies in error (#14050) When called with a non-existent LHS target name the user may be trying to add file-level dependencies. Clarify the error message to explain the difference between target-level and file-level dependencies. Point the reader at the commands and options needed for the latter. --- Source/cmAddDependenciesCommand.cxx | 12 ++++++++---- Tests/RunCMake/CMakeLists.txt | 1 + Tests/RunCMake/add_dependencies/CMakeLists.txt | 3 +++ Tests/RunCMake/add_dependencies/NoTarget-result.txt | 1 + Tests/RunCMake/add_dependencies/NoTarget-stderr.txt | 9 +++++++++ Tests/RunCMake/add_dependencies/NoTarget.cmake | 1 + Tests/RunCMake/add_dependencies/RunCMakeTest.cmake | 3 +++ 7 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 Tests/RunCMake/add_dependencies/CMakeLists.txt create mode 100644 Tests/RunCMake/add_dependencies/NoTarget-result.txt create mode 100644 Tests/RunCMake/add_dependencies/NoTarget-stderr.txt create mode 100644 Tests/RunCMake/add_dependencies/NoTarget.cmake create mode 100644 Tests/RunCMake/add_dependencies/RunCMakeTest.cmake diff --git a/Source/cmAddDependenciesCommand.cxx b/Source/cmAddDependenciesCommand.cxx index a77140d61..04a304e39 100644 --- a/Source/cmAddDependenciesCommand.cxx +++ b/Source/cmAddDependenciesCommand.cxx @@ -35,10 +35,14 @@ bool cmAddDependenciesCommand } else { - std::string error = "Adding dependency to non-existent target: "; - error += target_name; - this->SetError(error.c_str()); - return false; + cmOStringStream e; + e << "Cannot add target-level dependencies to non-existent target \"" + << target_name << "\".\n" + << "The add_dependencies works for top-level logical targets created " + << "by the add_executable, add_library, or add_custom_target commands. " + << "If you want to add file-level dependencies see the DEPENDS option " + << "of the add_custom_target and add_custom_command commands."; + this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str()); } return true; diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index a3c9605e7..402c8a980 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -68,6 +68,7 @@ if(NOT WIN32) endif() add_RunCMake_test(CompatibleInterface) +add_RunCMake_test(add_dependencies) add_RunCMake_test(build_command) add_RunCMake_test(find_package) add_RunCMake_test(include) diff --git a/Tests/RunCMake/add_dependencies/CMakeLists.txt b/Tests/RunCMake/add_dependencies/CMakeLists.txt new file mode 100644 index 000000000..e8db6b05b --- /dev/null +++ b/Tests/RunCMake/add_dependencies/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 2.8) +project(${RunCMake_TEST} NONE) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/add_dependencies/NoTarget-result.txt b/Tests/RunCMake/add_dependencies/NoTarget-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/add_dependencies/NoTarget-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/add_dependencies/NoTarget-stderr.txt b/Tests/RunCMake/add_dependencies/NoTarget-stderr.txt new file mode 100644 index 000000000..6af27074f --- /dev/null +++ b/Tests/RunCMake/add_dependencies/NoTarget-stderr.txt @@ -0,0 +1,9 @@ +CMake Error at NoTarget.cmake:1 \(add_dependencies\): + Cannot add target-level dependencies to non-existent target "foo". + + The add_dependencies works for top-level logical targets created by the + add_executable, add_library, or add_custom_target commands. If you want to + add file-level dependencies see the DEPENDS option of the add_custom_target + and add_custom_command commands. +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/add_dependencies/NoTarget.cmake b/Tests/RunCMake/add_dependencies/NoTarget.cmake new file mode 100644 index 000000000..903769417 --- /dev/null +++ b/Tests/RunCMake/add_dependencies/NoTarget.cmake @@ -0,0 +1 @@ +add_dependencies(foo bar) diff --git a/Tests/RunCMake/add_dependencies/RunCMakeTest.cmake b/Tests/RunCMake/add_dependencies/RunCMakeTest.cmake new file mode 100644 index 000000000..30b7e674f --- /dev/null +++ b/Tests/RunCMake/add_dependencies/RunCMakeTest.cmake @@ -0,0 +1,3 @@ +include(RunCMake) + +run_cmake(NoTarget)