Browse Source

ENH: Added <config>_OUTPUT_NAME target property to allow the output name to be set on a per-configuration basis.

Brad King 19 years ago
parent
commit
392137b6d7
2 changed files with 16 additions and 3 deletions
  1. 3 1
      Source/cmSetTargetPropertiesCommand.h
  2. 13 2
      Source/cmTarget.cxx

+ 3 - 1
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 "
+        "<CONFIG>_OUTPUT_NAME that can set the output name on a "
+        "per-configuration basis.  "
         "<CONFIG>_POSTFIX sets a postfix for the real name of the target "
         "when it is built under the configuration named by <CONFIG> "
         "(in upper-case, such as \"DEBUG_POSTFIX\").  The value of "

+ 13 - 2
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)
+    {
+    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;
+    outBase = outName;
     }
   else
     {