浏览代码

ENH: add support for .def files

Bill Hoffman 23 年之前
父节点
当前提交
fc933df1fc
共有 2 个文件被更改,包括 29 次插入2 次删除
  1. 26 2
      Source/cmMSDotNETGenerator.cxx
  2. 3 0
      Source/cmMSDotNETGenerator.h

+ 26 - 2
Source/cmMSDotNETGenerator.cxx

@@ -837,6 +837,7 @@ void cmMSDotNETGenerator::OutputBuildTool(std::ostream& fout,
       fout << "\t\t\t\tAdditionalLibraryDirectories=\"";
       this->OutputLibraryDirectories(fout, configName, libName, target);
       fout << "\"\n";
+      this->OutputModuleDefinitionFile(fout, target);
       fout << "\t\t\t\tProgramDatabaseFile=\"" << m_LibraryOutputPath 
            << "$(OutDir)\\" << libName << ".pdb\"\n";
       if(strcmp(configName, "Debug") == 0)
@@ -887,6 +888,24 @@ void cmMSDotNETGenerator::OutputBuildTool(std::ostream& fout,
     }
 }
 
+void cmMSDotNETGenerator::OutputModuleDefinitionFile(std::ostream& fout,
+                                                     const cmTarget &target)
+{
+  std::vector<cmSourceFile> const& classes = target.GetSourceFiles();
+  for(std::vector<cmSourceFile>::const_iterator i = classes.begin(); 
+      i != classes.end(); i++)
+    {  
+    if(cmSystemTools::UpperCase(i->GetSourceExtension()) == "DEF")
+      {
+      fout << "\t\t\t\tModuleDefinitionFile=\""
+           << this->ConvertToXMLOutputPath(i->GetFullPath().c_str())
+           << "\"\n";
+      return;
+      }
+    }
+  
+}
+
 void cmMSDotNETGenerator::OutputLibraryDirectories(std::ostream& fout,
                                                    const char* configName,
                                                    const char* libName,
@@ -992,12 +1011,17 @@ void cmMSDotNETGenerator::WriteVCProjFile(std::ostream& fout,
   std::vector<cmSourceGroup> sourceGroups = m_Makefile->GetSourceGroups();
   
   // get the classes from the source lists then add them to the groups
-  std::vector<cmSourceFile> classes = target.GetSourceFiles();
-  for(std::vector<cmSourceFile>::iterator i = classes.begin(); 
+  std::vector<cmSourceFile> const& classes = target.GetSourceFiles();
+  for(std::vector<cmSourceFile>::const_iterator i = classes.begin(); 
       i != classes.end(); i++)
     {
     // Add the file to the list of sources.
     std::string source = i->GetFullPath();
+    if(cmSystemTools::UpperCase(i->GetSourceExtension()) == "DEF")
+      {
+      m_ModuleDefinitionFile = i->GetFullPath();
+      }
+    
     cmSourceGroup& sourceGroup = m_Makefile->FindSourceGroup(source.c_str(),
                                                              sourceGroups);
     sourceGroup.AddSource(source.c_str(), &(*i));

+ 3 - 0
Source/cmMSDotNETGenerator.h

@@ -143,6 +143,8 @@ private:
                                 const char* configName,
                                 const char* libName,
                                 const cmTarget &target);
+  void OutputModuleDefinitionFile(std::ostream& fout,
+                                  const cmTarget &target);
   void OutputLibraries(std::ostream& fout,
                        const char* configName,
                        const char* libName,
@@ -153,6 +155,7 @@ private:
   bool m_BuildSLN;
   std::string m_LibraryOutputPath;
   std::string m_ExecutableOutputPath;
+  std::string m_ModuleDefinitionFile;
   std::vector<std::string> m_Configurations;
   std::string m_VCProjHeaderTemplate;
   std::string m_VCProjFooterTemplate;