Jelajahi Sumber

BUG: VS7 generator should use per-configuration linker flags for targets. This addresses bug#2765.

Brad King 20 tahun lalu
induk
melakukan
f4b306d5d4

+ 18 - 3
Source/cmLocalVisualStudio7Generator.cxx

@@ -658,7 +658,19 @@ void cmLocalVisualStudio7Generator::FillFlagMapFromCommandFlags(
     }
 }
 
+//----------------------------------------------------------------------------
+std::string
+cmLocalVisualStudio7Generator
+::GetBuildTypeLinkerFlags(std::string rootLinkerFlags, const char* configName)
+{
+  std::string configTypeUpper = cmSystemTools::UpperCase(configName);
+  std::string extraLinkOptionsBuildTypeDef = rootLinkerFlags + "_" + configTypeUpper;
 
+  std::string extraLinkOptionsBuildType =
+    m_Makefile->GetRequiredDefinition(extraLinkOptionsBuildTypeDef.c_str());
+
+  return extraLinkOptionsBuildType;
+}
 
 void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
                                                     const char* configName,
@@ -670,15 +682,18 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
   std::string extraLinkOptions;
   if(target.GetType() == cmTarget::EXECUTABLE)
     {
-    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS");
+    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_EXE_LINKER_FLAGS") +
+      std::string(" ") + GetBuildTypeLinkerFlags("CMAKE_EXE_LINKER_FLAGS", configName);
     }
   if(target.GetType() == cmTarget::SHARED_LIBRARY)
     {
-    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS");
+    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_SHARED_LINKER_FLAGS") +
+      std::string(" ") + GetBuildTypeLinkerFlags("CMAKE_SHARED_LINKER_FLAGS", configName);
     }
   if(target.GetType() == cmTarget::MODULE_LIBRARY)
     {
-    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS");
+    extraLinkOptions = m_Makefile->GetRequiredDefinition("CMAKE_MODULE_LINKER_FLAGS") +
+      std::string(" ") + GetBuildTypeLinkerFlags("CMAKE_MODULE_LINKER_FLAGS", configName);
     }
   
   const char* targetLinkFlags = target.GetProperty("LINK_FLAGS");

+ 2 - 0
Source/cmLocalVisualStudio7Generator.h

@@ -67,6 +67,8 @@ private:
   void FillFlagMapFromCommandFlags(std::map<cmStdString, cmStdString>& flagMap,
                                    cmVS7FlagTable* flagTable,
                                    std::string& flags);
+  std::string GetBuildTypeLinkerFlags(std::string rootLinkerFlags,
+                                      const char* configName);
   void OutputVCProjFile();
   void WriteVCProjHeader(std::ostream& fout, const char *libName,
                          cmTarget &tgt, std::vector<cmSourceGroup> &sgs);