diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 66c22b16e..40c9798b0 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -1302,6 +1302,11 @@ void cmTarget::DefineProperties(cmake *cm)
"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_GLOBAL_ROOTNAMESPACE", cmProperty::TARGET,
+ "Visual Studio project root namespace.",
+ "Sets the \"RootNamespace\" attribute for a generated Visual Studio "
+ "project. The attribute will be generated only if this is set.");
cm->DefineProperty
("VS_DOTNET_REFERENCES", cmProperty::TARGET,
"Visual Studio managed project .NET references",
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 933bf9573..61a34271d 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -262,6 +262,15 @@ void cmVisualStudio10TargetGenerator::Generate()
"\n";
}
+ const char* vsGlobalRootNamespace =
+ this->Target->GetProperty("VS_GLOBAL_ROOTNAMESPACE");
+ if(vsGlobalRootNamespace)
+ {
+ this->WriteString("", 2);
+ (*this->BuildFileStream) << cmVS10EscapeXML(vsGlobalRootNamespace) <<
+ "\n";
+ }
+
this->WriteString("", 2);
(*this->BuildFileStream) << this->Platform << "\n";
const char* projLabel = this->Target->GetProperty("PROJECT_LABEL");