Просмотр исходного кода

Document reading LOCATION_<CONFIG> early as undefined (#11671)

Although the LOCATION property is for compatibility with CMake 2.4, the
LOCATION_<CONFIG> property is modern.  However, if a project reads it
and sets location-altering properties later the behavior is undefined.
See parent commit for details.
Brad King 15 лет назад
Родитель
Сommit
57344977f5
1 измененных файлов с 12 добавлено и 9 удалено
  1. 12 9
      Source/cmTarget.cxx

+ 12 - 9
Source/cmTarget.cxx

@@ -501,6 +501,15 @@ void cmTarget::DefineProperties(cmake *cm)
      "value is the default.  "
      "See documentation of CMAKE_<LANG>_LINKER_PREFERENCE variables.");
 
+#define CM_LOCATION_UNDEFINED_BEHAVIOR \
+  "\n" \
+  "Do not set properties that affect the location of the target after " \
+  "reading this property.  These include properties whose names match " \
+  "\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_<CONFIG>)?\" " \
+  "or \"(IMPLIB_)?(PREFIX|SUFFIX)\".  " \
+  "Failure to follow this rule is not diagnosed and leaves the location " \
+  "of the target undefined."
+
   cm->DefineProperty
     ("LOCATION", cmProperty::TARGET,
      "Read-only location of a target on disk.",
@@ -520,14 +529,7 @@ void cmTarget::DefineProperties(cmake *cm)
      "In CMake 2.8.4 and above add_custom_command recognizes generator "
      "expressions to refer to target locations anywhere in the command.  "
      "Therefore this property is not needed for creating custom commands."
-     "\n"
-     "Do not read this property until after all other properties that can "
-     "affect the location of the target have been set.  "
-     "These include properties whose names match "
-     "\"(IMPLIB_)?(PREFIX|SUFFIX)\" or "
-     "\"(RUNTIME|LIBRARY|ARCHIVE)_OUTPUT_(NAME|DIRECTORY)(_<CONFIG>)?\".  "
-     "Failure to follow this rule is not diagnosed and leaves the location "
-     "of the target undefined.");
+     CM_LOCATION_UNDEFINED_BEHAVIOR);
 
   cm->DefineProperty
     ("LOCATION_<CONFIG>", cmProperty::TARGET,
@@ -540,7 +542,8 @@ void cmTarget::DefineProperties(cmake *cm)
      "By default CMake looks for an exact-match but otherwise uses an "
      "arbitrary available configuration.  "
      "Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported "
-     "configurations explicitly.");
+     "configurations explicitly."
+     CM_LOCATION_UNDEFINED_BEHAVIOR);
 
   cm->DefineProperty
     ("LINK_DEPENDS", cmProperty::TARGET,