From fdcc888c56d7c15a43eab8a2335356326e4d0e10 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 29 Sep 2006 16:42:58 -0400 Subject: [PATCH] ENH: Added support for getting a target's location on a per-configuration basis (ex. DEBUG_LOCATION). This does not fix but helps with bug#3250. --- Source/cmGetTargetPropertyCommand.h | 11 +++++++++-- Source/cmTarget.cxx | 10 +++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Source/cmGetTargetPropertyCommand.h b/Source/cmGetTargetPropertyCommand.h index 06a2d1703..fd89115f1 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 \"_LOCATION\" provides the full " + "path to the file on disk that will be created for the target when " + "building under configuration " + "(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 a5515f49e..24e196a9d 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(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")) {