Kaynağa Gözat

VS: Refactor include directory generation in .vcxproj files

Use the cmVisualStudioGeneratorOptions flag map to add the
AdditionalIncludeDirectories element to the project file.
Move appending of %(AdditionalIncludeDirectories) to the
locations that populate the flag vectors instead of where
they are written out.
Brad King 11 yıl önce
ebeveyn
işleme
5fcb42ab69

+ 19 - 18
Source/cmVisualStudio10TargetGenerator.cxx

@@ -1305,6 +1305,11 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
         clOptions.AddFlag("CompileAs", compileAs);
         }
       clOptions.Parse(flags.c_str());
+      if(clOptions.HasFlag("AdditionalIncludeDirectories"))
+        {
+        clOptions.AppendFlag("AdditionalIncludeDirectories",
+                             "%(AdditionalIncludeDirectories)");
+        }
       clOptions.AddDefines(configDefines.c_str());
       clOptions.SetConfiguration((*config).c_str());
       clOptions.OutputAdditionalOptions(*this->BuildFileStream, "      ", "");
@@ -1546,7 +1551,9 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
   Options& clOptions = *(this->ClOptions[configName]);
   this->WriteString("<ClCompile>\n", 2);
   clOptions.OutputAdditionalOptions(*this->BuildFileStream, "      ", "");
-  this->OutputIncludes(includes);
+  clOptions.AppendFlag("AdditionalIncludeDirectories", includes);
+  clOptions.AppendFlag("AdditionalIncludeDirectories",
+                       "%(AdditionalIncludeDirectories)");
   clOptions.OutputFlagMap(*this->BuildFileStream, "      ");
   clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, "      ",
                                           "\n", "CXX");
@@ -1577,21 +1584,6 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
   this->WriteString("</ClCompile>\n", 2);
 }
 
-void cmVisualStudio10TargetGenerator::
-OutputIncludes(std::vector<std::string> const & includes)
-{
-  this->WriteString("<AdditionalIncludeDirectories>", 3);
-  for(std::vector<std::string>::const_iterator i =  includes.begin();
-      i != includes.end(); ++i)
-    {
-    *this->BuildFileStream << cmVS10EscapeXML(*i) << ";";
-    }
-  this->WriteString("%(AdditionalIncludeDirectories)"
-                    "</AdditionalIncludeDirectories>\n", 0);
-}
-
-
-
 //----------------------------------------------------------------------------
 bool cmVisualStudio10TargetGenerator::ComputeRcOptions()
 {
@@ -1643,9 +1635,11 @@ WriteRCOptions(std::string const& configName,
   Options& clOptions = *(this->ClOptions[configName]);
   clOptions.OutputPreprocessorDefinitions(*this->BuildFileStream, "      ",
                                           "\n", "RC");
-  this->OutputIncludes(includes);
 
   Options& rcOptions = *(this->RcOptions[configName]);
+  rcOptions.AppendFlag("AdditionalIncludeDirectories", includes);
+  rcOptions.AppendFlag("AdditionalIncludeDirectories",
+                       "%(AdditionalIncludeDirectories)");
   rcOptions.OutputFlagMap(*this->BuildFileStream, "      ");
   rcOptions.OutputAdditionalOptions(*this->BuildFileStream, "      ", "");
 
@@ -1951,7 +1945,14 @@ WriteMidlOptions(std::string const& /*config*/,
   // only).  Perhaps there's something to be done to make this more automatic
   // on the CMake side?
   this->WriteString("<Midl>\n", 2);
-  this->OutputIncludes(includes);
+  this->WriteString("<AdditionalIncludeDirectories>", 3);
+  for(std::vector<std::string>::const_iterator i =  includes.begin();
+      i != includes.end(); ++i)
+    {
+    *this->BuildFileStream << cmVS10EscapeXML(*i) << ";";
+    }
+  this->WriteString("%(AdditionalIncludeDirectories)"
+                    "</AdditionalIncludeDirectories>\n", 0);
   this->WriteString("<OutputDirectory>$(IntDir)</OutputDirectory>\n", 3);
   this->WriteString("<HeaderFileName>%(Filename).h</HeaderFileName>\n", 3);
   this->WriteString(

+ 0 - 1
Source/cmVisualStudio10TargetGenerator.h

@@ -83,7 +83,6 @@ private:
   void WriteLinkOptions(std::string const& config);
   void WriteMidlOptions(std::string const& config,
                         std::vector<std::string> const & includes);
-  void OutputIncludes(std::vector<std::string> const & includes);
   void OutputLinkIncremental(std::string const& configName);
   void WriteCustomRule(cmSourceFile const* source,
                        cmCustomCommand const & command);

+ 0 - 4
Source/cmVisualStudioGeneratorOptions.cxx

@@ -324,10 +324,6 @@ cmVisualStudioGeneratorOptions
         fout << sep << cmVisualStudio10GeneratorOptionsEscapeForXML(*i);
         sep = ";";
         }
-      if (m->first == "AdditionalIncludeDirectories")
-        {
-        fout << sep << "%(AdditionalIncludeDirectories)";
-        }
       fout  << "</" << m->first << ">\n";
       }
     }