Skip file-level dependencies on custom targets (#11332)

A custom command may name a target created by add_custom_target in its
DEPENDS field.  Treat this case as a target-level dependency only since
a custom target provides no standard file on which to add a file-level
dependency.
This commit is contained in:
Brad King 2010-12-08 17:05:23 -05:00
parent e30a775f68
commit ced1d5eccd
3 changed files with 5 additions and 8 deletions

View File

@ -1878,10 +1878,9 @@ bool cmLocalGenerator::GetRealDependency(const char* inName,
break; break;
case cmTarget::UTILITY: case cmTarget::UTILITY:
case cmTarget::GLOBAL_TARGET: case cmTarget::GLOBAL_TARGET:
// Depending on a utility target may not work but just trust // A utility target has no file on which to depend. This was listed
// the user to have given a valid name. // only to get the target-level dependency.
dep = inName; return false;
return true;
case cmTarget::INSTALL_FILES: case cmTarget::INSTALL_FILES:
case cmTarget::INSTALL_PROGRAMS: case cmTarget::INSTALL_PROGRAMS:
case cmTarget::INSTALL_DIRECTORY: case cmTarget::INSTALL_DIRECTORY:

View File

@ -158,6 +158,7 @@ public:
/** Translate a dependency as given in CMake code to the name to /** Translate a dependency as given in CMake code to the name to
appear in a generated build file. If the given name is that of appear in a generated build file. If the given name is that of
a utility target, returns false. If the given name is that of
a CMake target it will be transformed to the real output a CMake target it will be transformed to the real output
location of that target for the given configuration. If the location of that target for the given configuration. If the
given name is the full path to a file it will be returned. given name is the full path to a file it will be returned.

View File

@ -130,6 +130,7 @@ ADD_CUSTOM_COMMAND(
################################################################ ################################################################
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/foo.pre
DEPENDS ${PROJECT_SOURCE_DIR}/foo.in DEPENDS ${PROJECT_SOURCE_DIR}/foo.in
TDocument # Ensure doc1.h generates before this target
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}
ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in ARGS -E copy ${PROJECT_SOURCE_DIR}/foo.in
${PROJECT_BINARY_DIR}/foo.pre ${PROJECT_BINARY_DIR}/foo.pre
@ -181,10 +182,6 @@ ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/generated.c
TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader) TARGET_LINK_LIBRARIES(CustomCommand GeneratedHeader)
# must add a dependency on TDocument otherwise it might never build and
# the CustomCommand executable really needs doc1.h
ADD_DEPENDENCIES(CustomCommand TDocument)
############################################################################## ##############################################################################
# Test for using just the target name as executable in the COMMAND # Test for using just the target name as executable in the COMMAND
# section. Has to be recognized and replaced by CMake with the output # section. Has to be recognized and replaced by CMake with the output