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.
This commit is contained in:
Brad King 2014-08-13 14:09:24 -04:00
parent 8e026aa7f2
commit 5fcb42ab69
3 changed files with 19 additions and 23 deletions

View File

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

View File

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

View File

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