diff --git a/Source/cmSetTargetPropertiesCommand.h b/Source/cmSetTargetPropertiesCommand.h index 84bbf777e..2cdc7de08 100644 --- a/Source/cmSetTargetPropertiesCommand.h +++ b/Source/cmSetTargetPropertiesCommand.h @@ -69,7 +69,9 @@ public: "(for SHARED library targets). " "OUTPUT_NAME sets the real name of a target when it is built and " "can be used to help create two targets of the same name even though " - "CMake requires unique logical target names. " + "CMake requires unique logical target names. There is also a " + "_OUTPUT_NAME that can set the output name on a " + "per-configuration basis. " "_POSTFIX sets a postfix for the real name of the target " "when it is built under the configuration named by " "(in upper-case, such as \"DEBUG_POSTFIX\"). The value of " diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 829007595..efa20f827 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -1199,9 +1199,20 @@ void cmTarget::GetFullNameInternal(TargetType type, outPrefix = targetPrefix?targetPrefix:""; // Append the target name or property-specified name. - if(const char* outname = this->GetProperty("OUTPUT_NAME")) + const char* outName = 0; + if(config && *config) { - outBase = outname; + std::string configProp = cmSystemTools::UpperCase(config); + configProp += "_OUTPUT_NAME"; + outName = this->GetProperty(configProp.c_str()); + } + if(!outName) + { + outName = this->GetProperty("OUTPUT_NAME"); + } + if(outName) + { + outBase = outName; } else {