瀏覽代碼

some clean up in link directories

Ken Martin 23 年之前
父節點
當前提交
6a0a8331ef
共有 1 個文件被更改,包括 35 次插入8 次删除
  1. 35 8
      Source/cmLocalVisualStudio7Generator.cxx

+ 35 - 8
Source/cmLocalVisualStudio7Generator.cxx

@@ -20,6 +20,7 @@
 #include "cmSystemTools.h"
 #include "cmSourceFile.h"
 #include "cmCacheManager.h"
+#include "cmake.h"
 
 cmLocalVisualStudio7Generator::cmLocalVisualStudio7Generator()
 {
@@ -361,12 +362,18 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
                                           const cmTarget &target)
 { 
   std::string temp;
+  std::string debugPostfix = "";
+  bool debug = !strcmp(configName,"Debug");
+  if (debug && m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX"))
+    {
+    debugPostfix = m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX");
+    }
   switch(target.GetType())
     {
     case cmTarget::STATIC_LIBRARY:
     {
       std::string libpath = m_LibraryOutputPath + 
-        "$(OutDir)/" + libName + ".lib";
+        "$(OutDir)/" + libName + debugPostfix + ".lib";
       fout << "\t\t\t<Tool\n"
            << "\t\t\t\tName=\"VCLibrarianTool\"\n"
            << "\t\t\t\t\tOutputFile=\"" 
@@ -385,6 +392,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
       temp += configName;
       temp += "/";
       temp += libName;
+      temp += debugPostfix;
       temp += ".dll";
       fout << "\t\t\t\tOutputFile=\"" 
            << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n";
@@ -395,9 +403,9 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
       fout << "\"\n";
       this->OutputModuleDefinitionFile(fout, target);
       temp = m_LibraryOutputPath;
-      temp += "$(OutDir)";
-      temp += "/";
+      temp += "$(OutDir)/";
       temp += libName;
+      temp += debugPostfix;
       temp += ".pdb";
       fout << "\t\t\t\tProgramDatabaseFile=\"" << 
         this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"\n";
@@ -412,6 +420,7 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
       temp += configName;
       temp += "/";
       temp += libName;
+      temp += debugPostfix;
       temp += ".lib";
       fout << "\t\t\t\tImportLibrary=\"" << this->ConvertToXMLOutputPathSingle(temp.c_str()) << "\"/>\n";
       break;
@@ -491,8 +500,13 @@ void cmLocalVisualStudio7Generator::OutputLibraryDirectories(std::ostream& fout,
     fout << this->ConvertToXMLOutputPath(temp.c_str()) << "," << 
       this->ConvertToXMLOutputPath(m_LibraryOutputPath.c_str());
     }
-  if(m_ExecutableOutputPath.size())
+  if(m_ExecutableOutputPath.size() && 
+     (m_LibraryOutputPath != m_ExecutableOutputPath))
     {
+    if (hasone)
+      {
+      fout << ",";
+      }
     hasone = true;
     std::string temp = m_ExecutableOutputPath;
     temp += "$(INTDIR)"; 
@@ -517,7 +531,8 @@ void cmLocalVisualStudio7Generator::OutputLibraryDirectories(std::ostream& fout,
         fout << ",";
         }
       std::string lpathi = lpath + "$(INTDIR)";
-          fout << this->ConvertToXMLOutputPath(lpathi.c_str()) << "," << lpath;
+      fout << this->ConvertToXMLOutputPath(lpathi.c_str()) << "," << 
+        this->ConvertToXMLOutputPath(lpath.c_str());
       hasone = true;
       }
     }
@@ -535,14 +550,26 @@ void cmLocalVisualStudio7Generator::OutputLibraries(std::ostream& fout,
     if(j->first != libName)
       {
       std::string lib = j->first;
+      std::string debugPostfix = "";
+      // if this is a library we are building then watch for a debugPostfix
+      if (!strcmp(configName,"Debug"))
+        {
+        std::string libPath = j->first + "_CMAKE_PATH";
+        const char* cacheValue
+          = m_GlobalGenerator->GetCMakeInstance()->GetCacheDefinition(libPath.c_str());
+        if(cacheValue && m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX"))
+          {
+          debugPostfix = m_Makefile->GetDefinition("CMAKE_DEBUG_POSTFIX");
+          }
+        }
       if(j->first.find(".lib") == std::string::npos)
         {
-        lib += ".lib";
+        lib += debugPostfix + ".lib";
         }
       lib = this->ConvertToXMLOutputPath(lib.c_str());
       if (j->second == cmTarget::GENERAL
-          || (j->second == cmTarget::DEBUG && strcmp(configName, "DEBUG") == 0)
-          || (j->second == cmTarget::OPTIMIZED && strcmp(configName, "DEBUG") != 0))
+          || (j->second == cmTarget::DEBUG && strcmp(configName, "Debug") == 0)
+          || (j->second == cmTarget::OPTIMIZED && strcmp(configName, "Debug") != 0))
         {
         fout << lib << " ";
         }