Procházet zdrojové kódy

Merge topic 'resolve/fix_target_name_with_dot_vs10/allow_upper_case_cpp_and_others'

eccc7d5 Merge branch 'allow_upper_case_cpp_and_others' into resolve/fix_target_name_with_dot_vs10/allow_upper_case_cpp_and_others
ed37fc3 VS2010: Set IntDir for utility and global targets.
e79e412 VS2010: Honor PROJECT_LABEL target property (#10611)
530ade6 Fix targets with . in the name for VS 10 IDE.
Brad King před 15 roky
rodič
revize
4c06e23307

+ 52 - 29
Source/cmVisualStudio10TargetGenerator.cxx

@@ -155,6 +155,13 @@ void cmVisualStudio10TargetGenerator::Generate()
   this->WriteString("<Keyword>Win32Proj</Keyword>\n", 2);
   this->WriteString("<Platform>", 2);
   (*this->BuildFileStream) << this->Platform << "</Platform>\n";
+  const char* projLabel = this->Target->GetProperty("PROJECT_LABEL");
+  if(!projLabel)
+    {
+    projLabel = this->Name.c_str();
+    }
+  this->WriteString("<ProjectName>", 2);
+  (*this->BuildFileStream) << projLabel << "</ProjectName>\n";
   this->WriteString("</PropertyGroup>\n", 1);
   this->WriteString("<Import Project="
                     "\"$(VCTargetsPath)\\Microsoft.Cpp.Default.props\" />\n",
@@ -807,10 +814,12 @@ bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
 
 void cmVisualStudio10TargetGenerator::WritePathAndIncrementalLinkOptions()
 {
-  if(this->Target->GetType() > cmTarget::MODULE_LIBRARY)
+  cmTarget::TargetType ttype = this->Target->GetType();
+  if(ttype > cmTarget::GLOBAL_TARGET)
     {
     return;
     }
+
   this->WriteString("<PropertyGroup>\n", 2);
   this->WriteString("<_ProjectFileVersion>10.0.20506.1"
                     "</_ProjectFileVersion>\n", 3);
@@ -820,36 +829,50 @@ void cmVisualStudio10TargetGenerator::WritePathAndIncrementalLinkOptions()
   for(std::vector<std::string>::iterator config = configs->begin();
       config != configs->end(); ++config)
     {
-    std::string targetNameFull = 
-      this->Target->GetFullName(config->c_str());
-    std::string intermediateDir = this->LocalGenerator->
-      GetTargetDirectory(*this->Target);
-    intermediateDir += "/";
-    intermediateDir += *config;
-    intermediateDir += "/";
-    this->ConvertToWindowsSlash(intermediateDir);
-    std::string outDir = this->Target->GetDirectory(config->c_str());
-    this->ConvertToWindowsSlash(outDir);
-    this->WritePlatformConfigTag("OutDir", config->c_str(), 3);
-    *this->BuildFileStream << outDir
-                           << "\\"
-                           << "</OutDir>\n";
-    this->WritePlatformConfigTag("IntDir", config->c_str(), 3); 
-    *this->BuildFileStream << intermediateDir
-                           << "</IntDir>\n";
-    this->WritePlatformConfigTag("TargetName", config->c_str(), 3);
-    *this->BuildFileStream << cmSystemTools::GetFilenameWithoutExtension(
-      targetNameFull.c_str())
-                           << "</TargetName>\n";
-    
-    this->WritePlatformConfigTag("TargetExt", config->c_str(), 3);
-    *this->BuildFileStream << cmSystemTools::GetFilenameLastExtension(
-      targetNameFull.c_str())
-                           << "</TargetExt>\n";
-    this->OutputLinkIncremental(*config);
+    if(ttype >= cmTarget::UTILITY)
+      {
+      this->WritePlatformConfigTag("IntDir", config->c_str(), 3);
+      *this->BuildFileStream
+        << "$(Platform)\\$(Configuration)\\$(ProjectName)\\"
+        << "</IntDir>\n";
+      }
+    else
+      {
+      std::string targetNameFull =
+        this->Target->GetFullName(config->c_str());
+      std::string intermediateDir = this->LocalGenerator->
+        GetTargetDirectory(*this->Target);
+      intermediateDir += "/";
+      intermediateDir += *config;
+      intermediateDir += "/";
+      this->ConvertToWindowsSlash(intermediateDir);
+      std::string outDir = this->Target->GetDirectory(config->c_str());
+      this->ConvertToWindowsSlash(outDir);
+
+      this->WritePlatformConfigTag("OutDir", config->c_str(), 3);
+      *this->BuildFileStream << outDir
+                             << "\\"
+                             << "</OutDir>\n";
+
+      this->WritePlatformConfigTag("IntDir", config->c_str(), 3);
+      *this->BuildFileStream << intermediateDir
+                             << "</IntDir>\n";
+
+      this->WritePlatformConfigTag("TargetName", config->c_str(), 3);
+      *this->BuildFileStream
+        << cmSystemTools::GetFilenameWithoutLastExtension(
+             targetNameFull.c_str())
+        << "</TargetName>\n";
+
+      this->WritePlatformConfigTag("TargetExt", config->c_str(), 3);
+      *this->BuildFileStream
+        << cmSystemTools::GetFilenameLastExtension(targetNameFull.c_str())
+        << "</TargetExt>\n";
+
+      this->OutputLinkIncremental(*config);
+      }
     }
   this->WriteString("</PropertyGroup>\n", 2);
-        
 }
 
 

+ 2 - 2
Tests/CxxOnly/CMakeLists.txt

@@ -5,7 +5,7 @@ set(CMAKE_DEBUG_POSTFIX "_test_debug_postfix")
 if(WIN32)
   set(EXTRA_SRCS test.CPP)
 endif()
-add_library(testcxx1 STATIC libcxx1.cxx ${EXTRA_SRCS})
+add_library(testcxx1.my STATIC libcxx1.cxx ${EXTRA_SRCS})
 add_library(testcxx2 SHARED libcxx2.cxx)
 add_executable (CxxOnly cxxonly.cxx)
-target_link_libraries(CxxOnly testcxx1 testcxx2)
+target_link_libraries(CxxOnly testcxx1.my testcxx2)

+ 8 - 0
Tests/FunctionTest/CMakeLists.txt

@@ -166,3 +166,11 @@ ELSE(DEFINED SUBDIR_DEFINED)
 ENDIF(DEFINED SUBDIR_DEFINED)
 
 ADD_EXECUTABLE(FunctionTest functionTest.c)
+
+# Use the PROJECT_LABEL property: in IDEs, the project label should appear
+# in the UI rather than the target name. If this were a good test of the
+# property rather than just a smoke test, it would verify that the label
+# actually appears in the UI of the IDE... Or at least that the text appears
+# somewhere in the generated project files.
+SET_PROPERTY(TARGET miniFunctionTest
+  PROPERTY PROJECT_LABEL "Test de Fonctionnement")