VS: Add support for three new project properties (#12586)
VS_GLOBAL_PROJECT_TYPES: A string containing UUIDs to embed in the Visual Studio project file under <ProjectTypes>. VS_GLOBAL_KEYWORD: Allows specification of a keyword like "ManagedCProj" instead of the default "Win32Proj", under <Keyword> VS_DOTNET_REFERENCES: Semicolon-delimited list of .NET references to add to the project, which creates a new <ItemGroup>.
This commit is contained in:
parent
57a85237ac
commit
a1f976ce0e
|
@ -1037,6 +1037,29 @@ void cmTarget::DefineProperties(cmake *cm)
|
||||||
"Visual Studio Source Code Control Aux Path.",
|
"Visual Studio Source Code Control Aux Path.",
|
||||||
"Can be set to change the visual studio source code control "
|
"Can be set to change the visual studio source code control "
|
||||||
"auxpath property.");
|
"auxpath property.");
|
||||||
|
cm->DefineProperty
|
||||||
|
("VS_GLOBAL_PROJECT_TYPES", cmProperty::TARGET,
|
||||||
|
"Visual Studio project type(s).",
|
||||||
|
"Can be set to one or more UUIDs recognized by Visual Studio "
|
||||||
|
"to indicate the type of project. This value is copied "
|
||||||
|
"verbatim into the generated project file. Example for a "
|
||||||
|
"managed C++ unit testing project: \""
|
||||||
|
"{3AC096D0-A1C2-E12C-1390-A8335801FDAB};"
|
||||||
|
"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\". UUIDs are "
|
||||||
|
"semicolon-delimited.");
|
||||||
|
cm->DefineProperty
|
||||||
|
("VS_GLOBAL_KEYWORD", cmProperty::TARGET,
|
||||||
|
"Visual Studio project keyword.",
|
||||||
|
"Sets the \"keyword\" attribute for a generated Visual Studio "
|
||||||
|
"project. Defaults to \"Win32Proj\". You may wish to override "
|
||||||
|
"this value with \"ManagedCProj\", for example, in a Visual "
|
||||||
|
"Studio managed C++ unit test project.");
|
||||||
|
cm->DefineProperty
|
||||||
|
("VS_DOTNET_REFERENCES", cmProperty::TARGET,
|
||||||
|
"Visual Studio managed project .NET references",
|
||||||
|
"Adds one or more semicolon-delimited .NET references to a "
|
||||||
|
"generated Visual Studio project. For example, \"System;"
|
||||||
|
"System.Windows.Forms\".");
|
||||||
cm->DefineProperty
|
cm->DefineProperty
|
||||||
("VS_GLOBAL_<variable>", cmProperty::TARGET,
|
("VS_GLOBAL_<variable>", cmProperty::TARGET,
|
||||||
"Visual Studio project-specific global variable.",
|
"Visual Studio project-specific global variable.",
|
||||||
|
|
|
@ -178,6 +178,15 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||||
this->WriteString("<ProjectGUID>", 2);
|
this->WriteString("<ProjectGUID>", 2);
|
||||||
(*this->BuildFileStream) << "{" << this->GUID << "}</ProjectGUID>\n";
|
(*this->BuildFileStream) << "{" << this->GUID << "}</ProjectGUID>\n";
|
||||||
|
|
||||||
|
const char* vsProjectTypes =
|
||||||
|
this->Target->GetProperty("VS_GLOBAL_PROJECT_TYPES");
|
||||||
|
if(vsProjectTypes)
|
||||||
|
{
|
||||||
|
this->WriteString("<ProjectTypes>", 2);
|
||||||
|
(*this->BuildFileStream) << cmVS10EscapeXML(vsProjectTypes) <<
|
||||||
|
"</ProjectTypes>\n";
|
||||||
|
}
|
||||||
|
|
||||||
const char* vsProjectName = this->Target->GetProperty("VS_SCC_PROJECTNAME");
|
const char* vsProjectName = this->Target->GetProperty("VS_SCC_PROJECTNAME");
|
||||||
const char* vsLocalPath = this->Target->GetProperty("VS_SCC_LOCALPATH");
|
const char* vsLocalPath = this->Target->GetProperty("VS_SCC_LOCALPATH");
|
||||||
const char* vsProvider = this->Target->GetProperty("VS_SCC_PROVIDER");
|
const char* vsProvider = this->Target->GetProperty("VS_SCC_PROVIDER");
|
||||||
|
@ -203,7 +212,19 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* vsGlobalKeyword =
|
||||||
|
this->Target->GetProperty("VS_GLOBAL_KEYWORD");
|
||||||
|
if(!vsGlobalKeyword)
|
||||||
|
{
|
||||||
this->WriteString("<Keyword>Win32Proj</Keyword>\n", 2);
|
this->WriteString("<Keyword>Win32Proj</Keyword>\n", 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->WriteString("<Keyword>", 2);
|
||||||
|
(*this->BuildFileStream) << cmVS10EscapeXML(vsGlobalKeyword) <<
|
||||||
|
"</Keyword>\n";
|
||||||
|
}
|
||||||
|
|
||||||
this->WriteString("<Platform>", 2);
|
this->WriteString("<Platform>", 2);
|
||||||
(*this->BuildFileStream) << this->Platform << "</Platform>\n";
|
(*this->BuildFileStream) << this->Platform << "</Platform>\n";
|
||||||
const char* projLabel = this->Target->GetProperty("PROJECT_LABEL");
|
const char* projLabel = this->Target->GetProperty("PROJECT_LABEL");
|
||||||
|
@ -233,6 +254,7 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||||
this->WriteCustomCommands();
|
this->WriteCustomCommands();
|
||||||
this->WriteObjSources();
|
this->WriteObjSources();
|
||||||
this->WriteCLSources();
|
this->WriteCLSources();
|
||||||
|
this->WriteDotNetReferences();
|
||||||
this->WriteProjectReferences();
|
this->WriteProjectReferences();
|
||||||
this->WriteString(
|
this->WriteString(
|
||||||
"<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\""
|
"<Import Project=\"$(VCTargetsPath)\\Microsoft.Cpp.targets\""
|
||||||
|
@ -244,6 +266,39 @@ void cmVisualStudio10TargetGenerator::Generate()
|
||||||
this->WriteGroups();
|
this->WriteGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmVisualStudio10TargetGenerator::WriteDotNetReferences()
|
||||||
|
{
|
||||||
|
const char* vsDotNetReferences
|
||||||
|
= this->Target->GetProperty("VS_DOTNET_REFERENCES");
|
||||||
|
if(vsDotNetReferences)
|
||||||
|
{
|
||||||
|
std::string references(vsDotNetReferences);
|
||||||
|
std::string::size_type position = 0;
|
||||||
|
|
||||||
|
this->WriteString("<ItemGroup>\n", 1);
|
||||||
|
while(references.length() > 0)
|
||||||
|
{
|
||||||
|
if((position = references.find(";")) == std::string::npos)
|
||||||
|
{
|
||||||
|
position = references.length() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this->WriteString("<Reference Include=\"", 2);
|
||||||
|
(*this->BuildFileStream) <<
|
||||||
|
cmVS10EscapeXML(references.substr(0, position)) << "\">\n";
|
||||||
|
this->WriteString("<CopyLocalSatelliteAssemblies>true"
|
||||||
|
"</CopyLocalSatelliteAssemblies>\n", 3);
|
||||||
|
this->WriteString("<ReferenceOutputAssembly>true"
|
||||||
|
"</ReferenceOutputAssembly>\n", 3);
|
||||||
|
this->WriteString("</Reference>\n", 2);
|
||||||
|
|
||||||
|
references.erase(0, position + 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this->WriteString("</ItemGroup>\n", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ConfigurationType Application, Utility StaticLibrary DynamicLibrary
|
// ConfigurationType Application, Utility StaticLibrary DynamicLibrary
|
||||||
|
|
||||||
void cmVisualStudio10TargetGenerator::WriteProjectConfigurations()
|
void cmVisualStudio10TargetGenerator::WriteProjectConfigurations()
|
||||||
|
|
|
@ -47,6 +47,7 @@ private:
|
||||||
void WriteProjectConfigurations();
|
void WriteProjectConfigurations();
|
||||||
void WriteProjectConfigurationValues();
|
void WriteProjectConfigurationValues();
|
||||||
void WriteCLSources();
|
void WriteCLSources();
|
||||||
|
void WriteDotNetReferences();
|
||||||
void WriteObjSources();
|
void WriteObjSources();
|
||||||
void WritePathAndIncrementalLinkOptions();
|
void WritePathAndIncrementalLinkOptions();
|
||||||
void WriteItemDefinitionGroups();
|
void WriteItemDefinitionGroups();
|
||||||
|
|
Loading…
Reference in New Issue