Kaynağa Gözat

Merge topic 'csharp_project_without_sources'

8e654a37 VS: Enable generation of CSharp projects without initial .cs files

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1521
Brad King 8 yıl önce
ebeveyn
işleme
caa1c4967a

+ 10 - 6
Source/cmVisualStudio10TargetGenerator.cxx

@@ -66,11 +66,14 @@ static bool cmVS10IsTargetsFile(std::string const& path)
   return cmSystemTools::Strucmp(ext.c_str(), ".targets") == 0;
 }
 
-static std::string computeProjectFileExtension(cmGeneratorTarget const* t)
+static std::string computeProjectFileExtension(cmGeneratorTarget const* t,
+                                               const std::string& config)
 {
   std::string res;
   res = ".vcxproj";
-  if (cmGlobalVisualStudioGenerator::TargetIsCSharpOnly(t)) {
+  std::string lang = t->GetLinkerLanguage(config);
+  if (cmGlobalVisualStudioGenerator::TargetIsCSharpOnly(t) ||
+      lang == "CSharp") {
     res = ".csproj";
   }
   return res;
@@ -199,8 +202,8 @@ void cmVisualStudio10TargetGenerator::Generate()
       this->GeneratorTarget->GetProperty("EXTERNAL_MSPROJECT")) {
     return;
   }
-  this->ProjectFileExtension =
-    computeProjectFileExtension(this->GeneratorTarget);
+  this->ProjectFileExtension = computeProjectFileExtension(
+    this->GeneratorTarget, *this->Configurations.begin());
   if (this->ProjectFileExtension == ".vcxproj") {
     this->ProjectType = vcxproj;
     this->Managed = false;
@@ -1393,7 +1396,8 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
   std::string path = this->LocalGenerator->GetCurrentBinaryDirectory();
   path += "/";
   path += this->Name;
-  path += computeProjectFileExtension(this->GeneratorTarget);
+  path += computeProjectFileExtension(this->GeneratorTarget,
+                                      *this->Configurations.begin());
   path += ".filters";
   cmGeneratedFileStream fout(path.c_str());
   fout.SetCopyIfDifferent(true);
@@ -3670,7 +3674,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectReferences()
       path = lg->GetCurrentBinaryDirectory();
       path += "/";
       path += dt->GetName();
-      path += computeProjectFileExtension(dt);
+      path += computeProjectFileExtension(dt, *this->Configurations.begin());
     }
     this->ConvertToWindowsSlash(path);
     (*this->BuildFileStream) << cmVS10EscapeXML(path) << "\">\n";

+ 1 - 0
Tests/RunCMake/VS10Project/RunCMakeTest.cmake

@@ -5,3 +5,4 @@ run_cmake(VsCustomProps)
 run_cmake(VsDebuggerWorkingDir)
 run_cmake(VsCSharpCustomTags)
 run_cmake(VsCSharpReferenceProps)
+run_cmake(VsCSharpWithoutSources)

+ 5 - 0
Tests/RunCMake/VS10Project/VsCSharpWithoutSources-check.cmake

@@ -0,0 +1,5 @@
+set(csProjectFile "${RunCMake_TEST_BINARY_DIR}/foo.csproj")
+if(NOT EXISTS "${csProjectFile}")
+  set(RunCMake_TEST_FAILED "Project file ${csProjectFile} does not exist.")
+  return()
+endif()

+ 7 - 0
Tests/RunCMake/VS10Project/VsCSharpWithoutSources.cmake

@@ -0,0 +1,7 @@
+enable_language(CSharp)
+
+add_library(foo SHARED
+  "${CMAKE_CURRENT_LIST_FILE}")
+
+set_target_properties(foo PROPERTIES
+  LINKER_LANGUAGE CSharp)