Просмотр исходного кода

Merge topic 'vs11-generator'

3b5256e Teach our tests about special cases for VS 11
3d5632e Add Visual Studio 11 generator for x86 and x64 tools
David Cole 14 лет назад
Родитель
Сommit
449aef3efb

+ 54 - 0
Modules/CMakeVS11FindMake.cmake

@@ -0,0 +1,54 @@
+
+#=============================================================================
+# Copyright 2007-2011 Kitware, Inc.
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# Look for devenv as a build program.  We need to use this to support
+# Intel Fortran integration into VS.  MSBuild can not be used for that case
+# since Intel Fortran uses the older devenv file format.
+FIND_PROGRAM(CMAKE_MAKE_PROGRAM
+  NAMES devenv
+  HINTS
+  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;EnvironmentDirectory]
+  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup;Dbghelp_path]
+  "$ENV{ProgramFiles}/Microsoft Visual Studio 11.0/Common7/IDE"
+  "$ENV{ProgramFiles}/Microsoft Visual Studio11.0/Common7/IDE"
+  "$ENV{ProgramFiles}/Microsoft Visual Studio 11/Common7/IDE"
+  "$ENV{ProgramFiles}/Microsoft Visual Studio11/Common7/IDE"
+  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11.0/Common7/IDE"
+  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11.0/Common7/IDE"
+  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11/Common7/IDE"
+  "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11/Common7/IDE"
+  "/Program Files/Microsoft Visual Studio 11.0/Common7/IDE/"
+  "/Program Files/Microsoft Visual Studio 11/Common7/IDE/"
+  )
+
+# if devenv is not found, then use MSBuild.
+# it is expected that if devenv is not found, then we are
+# dealing with Visual Studio Express.  VCExpress has random
+# failures when being run as a command line build tool which
+# causes the compiler checks and try-compile stuff to fail. MSbuild
+# is a better choice for this.  However, VCExpress does not support
+# cross compiling needed for Win CE.
+IF(NOT CMAKE_CROSSCOMPILING)
+  FIND_PROGRAM(CMAKE_MAKE_PROGRAM
+    NAMES MSBuild
+    HINTS
+    [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir]
+    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"
+    "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/"
+    "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0;CLR Version]/")
+ENDIF()
+
+MARK_AS_ADVANCED(CMAKE_MAKE_PROGRAM)
+SET(MSVC11 1)
+SET(MSVC_VERSION 1700)

+ 4 - 0
Source/CMakeLists.txt

@@ -324,6 +324,10 @@ IF (WIN32)
       cmGlobalVisualStudio10Win64Generator.cxx
       cmGlobalVisualStudio10IA64Generator.h
       cmGlobalVisualStudio10IA64Generator.cxx
+      cmGlobalVisualStudio11Generator.h
+      cmGlobalVisualStudio11Generator.cxx
+      cmGlobalVisualStudio11Win64Generator.h
+      cmGlobalVisualStudio11Win64Generator.cxx
       cmGlobalVisualStudioGenerator.cxx
       cmGlobalVisualStudioGenerator.h
       cmGlobalWatcomWMakeGenerator.cxx

+ 0 - 1
Source/cmGlobalVisualStudio10Generator.h

@@ -79,7 +79,6 @@ protected:
   virtual const char* GetIDEVersion() { return "10.0"; }
 
   std::string PlatformToolset;
-private:
   bool ExpressEdition;
 };
 #endif

+ 45 - 0
Source/cmGlobalVisualStudio11Generator.cxx

@@ -0,0 +1,45 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#include "cmGlobalVisualStudio11Generator.h"
+#include "cmMakefile.h"
+
+//----------------------------------------------------------------------------
+cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator()
+{
+  this->FindMakeProgramFile = "CMakeVS11FindMake.cmake";
+  this->ExpressEdition = false; // TODO: VS 11 Express support
+  this->PlatformToolset = "v110";
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11Generator::AddPlatformDefinitions(cmMakefile* mf)
+{
+  mf->AddDefinition("MSVC11", "1");
+  mf->AddDefinition("MSVC_C_ARCHITECTURE_ID", "X86");
+  mf->AddDefinition("MSVC_CXX_ARCHITECTURE_ID", "X86");
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11Generator::WriteSLNHeader(std::ostream& fout)
+{
+  fout << "Microsoft Visual Studio Solution File, Format Version 12.00\n";
+  fout << "# Visual Studio 2011\n";
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11Generator
+::GetDocumentation(cmDocumentationEntry& entry) const
+{
+  entry.Name = this->GetName();
+  entry.Brief = "Generates Visual Studio 11 project files.";
+  entry.Full = "";
+}

+ 43 - 0
Source/cmGlobalVisualStudio11Generator.h

@@ -0,0 +1,43 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#ifndef cmGlobalVisualStudio11Generator_h
+#define cmGlobalVisualStudio11Generator_h
+
+#include "cmGlobalVisualStudio10Generator.h"
+
+
+/** \class cmGlobalVisualStudio11Generator  */
+class cmGlobalVisualStudio11Generator:
+  public cmGlobalVisualStudio10Generator
+{
+public:
+  cmGlobalVisualStudio11Generator();
+  static cmGlobalGenerator* New() {
+    return new cmGlobalVisualStudio11Generator; }
+
+  ///! Get the name for the generator.
+  virtual const char* GetName() const {
+    return cmGlobalVisualStudio11Generator::GetActualName();}
+  static const char* GetActualName() {return "Visual Studio 11";}
+  virtual void AddPlatformDefinitions(cmMakefile* mf);
+
+  virtual void WriteSLNHeader(std::ostream& fout);
+
+  /** Get the documentation entry for this generator.  */
+  virtual void GetDocumentation(cmDocumentationEntry& entry) const;
+
+  /** TODO: VS 11 user macro support. */
+  virtual std::string GetUserMacrosDirectory() { return ""; }
+protected:
+  virtual const char* GetIDEVersion() { return "11.0"; }
+};
+#endif

+ 33 - 0
Source/cmGlobalVisualStudio11Win64Generator.cxx

@@ -0,0 +1,33 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#include "cmGlobalVisualStudio11Win64Generator.h"
+#include "cmMakefile.h"
+#include "cmake.h"
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11Win64Generator
+::GetDocumentation(cmDocumentationEntry& entry) const
+{
+  entry.Name = this->GetName();
+  entry.Brief = "Generates Visual Studio 11 Win64 project files.";
+  entry.Full = "";
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11Win64Generator
+::AddPlatformDefinitions(cmMakefile* mf)
+{
+  this->cmGlobalVisualStudio11Generator::AddPlatformDefinitions(mf);
+  mf->AddDefinition("CMAKE_FORCE_WIN64", "TRUE");
+  mf->AddDefinition("MSVC_C_ARCHITECTURE_ID", "x64");
+  mf->AddDefinition("MSVC_CXX_ARCHITECTURE_ID", "x64");
+}

+ 37 - 0
Source/cmGlobalVisualStudio11Win64Generator.h

@@ -0,0 +1,37 @@
+/*============================================================================
+  CMake - Cross Platform Makefile Generator
+  Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+  Distributed under the OSI-approved BSD License (the "License");
+  see accompanying file Copyright.txt for details.
+
+  This software is distributed WITHOUT ANY WARRANTY; without even the
+  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+  See the License for more information.
+============================================================================*/
+#ifndef cmGlobalVisualStudio11Win64Generator_h
+#define cmGlobalVisualStudio11Win64Generator_h
+
+#include "cmGlobalVisualStudio11Generator.h"
+
+class cmGlobalVisualStudio11Win64Generator :
+  public cmGlobalVisualStudio11Generator
+{
+public:
+  cmGlobalVisualStudio11Win64Generator() {}
+  static cmGlobalGenerator* New() {
+    return new cmGlobalVisualStudio11Win64Generator; }
+
+  ///! Get the name for the generator.
+  virtual const char* GetName() const {
+    return cmGlobalVisualStudio11Win64Generator::GetActualName();}
+  static const char* GetActualName() {return "Visual Studio 11 Win64";}
+
+  virtual const char* GetPlatformName() const {return "x64";}
+
+  /** Get the documentation entry for this generator.  */
+  virtual void GetDocumentation(cmDocumentationEntry& entry) const;
+
+  virtual void AddPlatformDefinitions(cmMakefile* mf);
+};
+#endif

+ 6 - 0
Source/cmake.cxx

@@ -68,6 +68,8 @@
 #    include "cmGlobalVisualStudio10Generator.h"
 #    include "cmGlobalVisualStudio10IA64Generator.h"
 #    include "cmGlobalVisualStudio10Win64Generator.h"
+#    include "cmGlobalVisualStudio11Generator.h"
+#    include "cmGlobalVisualStudio11Win64Generator.h"
 #    include "cmGlobalVisualStudio8Win64Generator.h"
 #    include "cmGlobalBorlandMakefileGenerator.h"
 #    include "cmGlobalNMakeMakefileGenerator.h"
@@ -2580,6 +2582,10 @@ void cmake::AddDefaultGenerators()
     &cmGlobalVisualStudio10IA64Generator::New;
   this->Generators[cmGlobalVisualStudio10Win64Generator::GetActualName()] =
     &cmGlobalVisualStudio10Win64Generator::New;
+  this->Generators[cmGlobalVisualStudio11Generator::GetActualName()] =
+    &cmGlobalVisualStudio11Generator::New;
+  this->Generators[cmGlobalVisualStudio11Win64Generator::GetActualName()] =
+    &cmGlobalVisualStudio11Win64Generator::New;
   this->Generators[cmGlobalVisualStudio71Generator::GetActualName()] =
     &cmGlobalVisualStudio71Generator::New;
   this->Generators[cmGlobalVisualStudio8Generator::GetActualName()] =

+ 4 - 0
Tests/CheckCompilerRelatedVariables/CMakeLists.txt

@@ -34,6 +34,9 @@ endif()
 if(DEFINED MSVC10)
   math(EXPR msvc_total "${msvc_total} + 1")
 endif()
+if(DEFINED MSVC11)
+  math(EXPR msvc_total "${msvc_total} + 1")
+endif()
 
 echo_var(MSVC)
 echo_var(MSVC60)
@@ -42,6 +45,7 @@ echo_var(MSVC71)
 echo_var(MSVC80)
 echo_var(MSVC90)
 echo_var(MSVC10)
+echo_var(MSVC11)
 
 if(MSVC)
   #

+ 4 - 1
Tests/Preprocess/CMakeLists.txt

@@ -37,6 +37,9 @@ endif("${CMAKE_GENERATOR}" MATCHES "Visual Studio")
 if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 10")
   set(PP_VS100 1)
 endif("${CMAKE_GENERATOR}" MATCHES "Visual Studio 10")
+if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 11")
+  set(PP_VS110 1)
+endif("${CMAKE_GENERATOR}" MATCHES "Visual Studio 11")
 
 # Some tests below check the PP_* variables set above.  They are meant
 # to test the case that the build tool is at fault.  Other tests below
@@ -52,7 +55,7 @@ endif("${CMAKE_GENERATOR}" MATCHES "Visual Studio 10")
 # must not have it escaped inside the configured header.
 set(STRING_EXTRA "")
 
-if(NOT BORLAND AND NOT PP_VS70 AND NOT PP_VS100)
+if(NOT BORLAND AND NOT PP_VS70 AND NOT PP_VS100 AND NOT PP_VS110)
   # Borland, VS70 IDE: ;
   # The Borland compiler will simply not accept a non-escaped semicolon
   # on the command line.  If it is escaped \; then the escape character

+ 2 - 2
Tests/VSExternalInclude/CMakeLists.txt

@@ -6,7 +6,7 @@ IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
 ELSE(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
   SET(PROJECT_EXT vcproj)
 ENDIF(${CMAKE_GENERATOR} MATCHES "Visual Studio 6")
-IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 10")
+IF(${CMAKE_GENERATOR} MATCHES "Visual Studio 1[01]")
   SET(PROJECT_EXT vcxproj)
 ENDIF()
 
@@ -46,7 +46,7 @@ ADD_DEPENDENCIES(VSExternalInclude lib2)
 # and the sln file can no longer be the only source
 # of that depend.  So, for VS 10 make the executable
 # depend on lib1 and lib2
-IF(MSVC10)
+IF(MSVC10 OR MSVC11)
   ADD_DEPENDENCIES(VSExternalInclude lib1)
 ENDIF()