Bladeren bron

MSVC: Add MSVC_TOOLSET_VERSION variable

Provide the MSVC toolset version number based on the compiler version.

Fixes: #16923
Arkady Shapkin 7 jaren geleden
bovenliggende
commit
304f493e57

+ 1 - 0
Help/manual/cmake-variables.7.rst

@@ -239,6 +239,7 @@ Variables that Describe the System
    /variable/MSVC80
    /variable/MSVC90
    /variable/MSVC_IDE
+   /variable/MSVC_TOOLSET_VERSION
    /variable/MSVC_VERSION
    /variable/UNIX
    /variable/WIN32

+ 6 - 0
Help/release/dev/msvc-toolset-version-variable.rst

@@ -0,0 +1,6 @@
+msvc-toolset-version-variable
+-----------------------------
+
+* A :variable:`MSVC_TOOLSET_VERSION` variable was added to provide the
+  MSVC toolset version associated with the current MSVC compiler version
+  in :variable:`MSVC_VERSION`.

+ 21 - 0
Help/variable/MSVC_TOOLSET_VERSION.rst

@@ -0,0 +1,21 @@
+MSVC_TOOLSET_VERSION
+--------------------
+
+The toolset version of Microsoft Visual C/C++ being used if any.
+If MSVC-like is being used, this variable is set based on the version
+of the compiler as given by the :variable:`MSVC_VERSION` variable.
+
+Known toolset version numbers are::
+
+  80        = VS 2005 (8.0)
+  90        = VS 2008 (9.0)
+  100       = VS 2010 (10.0)
+  110       = VS 2012 (11.0)
+  120       = VS 2013 (12.0)
+  140       = VS 2015 (14.0)
+  141       = VS 2017 (15.0)
+
+Compiler versions newer than those known to CMake will be reported
+as the latest known toolset version.
+
+See also the :variable:`MSVC_VERSION` variable.

+ 2 - 1
Help/variable/MSVC_VERSION.rst

@@ -19,4 +19,5 @@ Known version numbers are::
   1900      = VS 14.0 (v140 toolset)
   1910-1919 = VS 15.0 (v141 toolset)
 
-See also the  :variable:`CMAKE_<LANG>_COMPILER_VERSION` variable.
+See also the  :variable:`CMAKE_<LANG>_COMPILER_VERSION` and
+:variable:`MSVC_TOOLSET_VERSION` variable.

+ 25 - 0
Modules/Platform/Windows-MSVC.cmake

@@ -71,6 +71,31 @@ if(NOT MSVC_VERSION)
     message(FATAL_ERROR "MSVC compiler version not detected properly: ${_compiler_version}")
   endif()
 
+  if(MSVC_VERSION GREATER_EQUAL 1910)
+    # VS 2017 or greater
+    set(MSVC_TOOLSET_VERSION 141)
+  elseif(MSVC_VERSION EQUAL 1900)
+    # VS 2015
+    set(MSVC_TOOLSET_VERSION 140)
+  elseif(MSVC_VERSION EQUAL 1800)
+    # VS 2013
+    set(MSVC_TOOLSET_VERSION 120)
+  elseif(MSVC_VERSION EQUAL 1700)
+    # VS 2012
+    set(MSVC_TOOLSET_VERSION 110)
+  elseif(MSVC_VERSION EQUAL 1600)
+    # VS 2010
+    set(MSVC_TOOLSET_VERSION 100)
+  elseif(MSVC_VERSION EQUAL 1500)
+    # VS 2008
+    set(MSVC_TOOLSET_VERSION 90)
+  elseif(MSVC_VERSION EQUAL 1400)
+    # VS 2005
+    set(MSVC_TOOLSET_VERSION 80)
+  else()
+    # We don't support MSVC_TOOLSET_VERSION for earlier compiler.
+  endif()
+
   set(MSVC10)
   set(MSVC11)
   set(MSVC12)