Prechádzať zdrojové kódy

ENH: add first cut at support for exe with same name as lib

Ken Martin 20 rokov pred
rodič
commit
fbf40e202a

+ 10 - 1
Source/cmLocalUnixMakefileGenerator3.cxx

@@ -1314,7 +1314,16 @@ cmLocalUnixMakefileGenerator3
     targetFullPath += ".app/Contents/MacOS/";
     }
 #endif
-  targetFullPath += target.GetName();
+
+  // do we have a different executable name?
+  if (target.GetProperty("OUTPUT_NAME"))
+    {
+    targetFullPath += target.GetProperty("OUTPUT_NAME");
+    }
+  else
+    {
+    targetFullPath += target.GetName();
+    }
   targetFullPath += cmSystemTools::GetExecutableExtension();
 
   // Convert to the output path to use in constructing commands.

+ 15 - 4
Source/cmLocalVisualStudio6Generator.cxx

@@ -739,9 +739,11 @@ inline std::string removeQuotes(const std::string& s)
 }
 
   
-void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const char *libName,
-                                   const cmTarget &target, 
-                                 std::vector<cmSourceGroup> &)
+void cmLocalVisualStudio6Generator
+::WriteDSPHeader(std::ostream& fout, 
+                 const char *libName,
+                 const cmTarget &target, 
+                 std::vector<cmSourceGroup> &)
 {
   std::set<std::string> pathEmitted;
   
@@ -948,7 +950,16 @@ void cmLocalVisualStudio6Generator::WriteDSPHeader(std::ostream& fout, const cha
   std::string extraLinkOptions;
   if(target.GetType() == cmTarget::EXECUTABLE)
     {
-    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS");
+    extraLinkOptions = 
+      m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS");
+
+    // if the executable has an output name then add the appropriate flag
+    if (target.GetProperty("OUTPUT_NAME"))
+      {
+      libMultiLineOptions += "# ADD LINK32 /out:";
+      libMultiLineOptions += target.GetProperty("OUTPUT_NAME");
+      libMultiLineOptions += " \n";
+      }
     }
   if(target.GetType() == cmTarget::SHARED_LIBRARY)
     {

+ 10 - 1
Source/cmLocalVisualStudio7Generator.cxx

@@ -726,7 +726,16 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
       temp = m_ExecutableOutputPath;
       temp += configName;
       temp += "/";
-      temp += libName;
+
+      // do we have a different executable name?
+      if (target.GetProperty("OUTPUT_NAME"))
+        {
+        temp += target.GetProperty("OUTPUT_NAME");
+        }
+      else
+        {
+        temp += libName;
+        }      
       temp += ".exe";
       fout << "\t\t\t\tOutputFile=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n";
       for(std::map<cmStdString, cmStdString>::iterator i = flagMap.begin();

+ 2 - 0
Source/cmSetTargetPropertiesCommand.h

@@ -65,6 +65,8 @@ public:
         "sources.  PRE_INSTALL_SCRIPT specifies CMake script that is run "
         "prior to installing the target. POST_INSTALL_SCRIPT specifies "
         "CMake script that is run after target is installed. "
+        "The OUTPUT_NAME can be used to set an output name that is "
+        "used in place of the target name when creating executables."
         "If not set here then it is set to target_EXPORTS by default "
         "(with some substitutions if target is not a valid C identifier).  "
         "You can use and prop value pair you want and extract it later with "