summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGetTargetPropertyCommand.h11
-rw-r--r--Source/cmTarget.cxx10
2 files changed, 18 insertions, 3 deletions
diff --git a/Source/cmGetTargetPropertyCommand.h b/Source/cmGetTargetPropertyCommand.h
index 06a2d17..fd89115 100644
--- a/Source/cmGetTargetPropertyCommand.h
+++ b/Source/cmGetTargetPropertyCommand.h
@@ -58,10 +58,17 @@ public:
"will be set to \"NOTFOUND\". Use SET_TARGET_PROPERTIES to set "
"property values. Properties are usually used to control how "
"a target is built.\n"
+ "The read-only property \"<CONFIG>_LOCATION\" provides the full "
+ "path to the file on disk that will be created for the target when "
+ "building under configuration <CONFIG> "
+ "(in upper-case, such as \"DEBUG_LOCATION\"). "
"The read-only property \"LOCATION\" specifies "
"the full path to the file on disk that will be created for the "
- "target. This is very useful for executable targets to get "
- "the path to the executable file for use in a custom command. "
+ "target. The path may contain a build-system-specific portion that "
+ "is replaced at build time with the configuration getting built "
+ "(such as \"$(ConfigurationName)\" in VS). "
+ "This is very useful for executable targets to get "
+ "the path to the executable file for use in a custom command.\n"
"The read-only property \"TYPE\" returns which type the specified "
"target has (EXECUTABLE, STATIC_LIBRARY, SHARED_LIBRARY, "
"MODULE_LIBRARY, UTILITY, INSTALL_FILES or INSTALL_PROGRAMS). "
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index a5515f4..24e196a 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -907,7 +907,15 @@ const char *cmTarget::GetProperty(const char* prop)
// variable in the location.
this->SetProperty("LOCATION", this->GetLocation(0));
}
-
+
+ // Per-configuration location can be computed.
+ int len = static_cast<int>(strlen(prop));
+ if(len > 9 && strcmp(prop+len-9, "_LOCATION") == 0)
+ {
+ std::string configName(prop, len-9);
+ this->SetProperty(prop, this->GetLocation(configName.c_str()));
+ }
+
// the type property returns what type the target is
if (!strcmp(prop,"TYPE"))
{