最近更新:2025-11-09 09:37:00
从一个外行角度看,VC/VS有3种版本号,具备一定的迷惑性:(xx表示具体的数字)
MSVC++ xx(VC版本 eg. VC6.0)
_MSC_VER xx
VisualStudio xx(VS版本 eg. VS2012)
对照关系整理如下(更新至2022.3.26):
VC 版本
_MSC_VER宏的值
VS 版本
MSVC toolset version
VS 6.0
1200
VS 6.0
VS 7.0
1300
VS2002
VS 7.1
1310
VS2003
VS 8.0
1400
VS2005
80
VS 9.0
1500
VS2008
90
VS 10.0
1600
VS2010
100
VS 11.0
1700
VS2012
110
VS 12.0
1800
VS2013
120
VS 14.0
1900
VS2015
140
VS 15.0
[1910,1916]
VS2017
141
VS 16.0
[1920,1929]
VS2019
142
VS 17.0
[1930,1949]
VS2022
143
VS 18.0
[1950,1959]
VS2026
145
对于 VS2022,CMake 文档中 MSVC_VERSION 的信息更新有延迟, 它目前(2024-05-27 15:22:56)仍认为 1939 是最大可能的取值,而 VS2022 17.10.0 版本中 _MSC_VER 这一 c/c++ 宏取值为 1940, cmake 变量 MSVC_VERSION 也变为了 1940.
Table 1. Mapping of VS 2022 update releases to current MSVC versions ( MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10
)
Visual Studio Releases
Updates with new MSVC Tools
MSVC version
_MSC_VER
End of Support
Visual Studio 2022
GA (Version 17.0) LTSC
19.30.30705
1930
Jul 11, 2023
Version 17.1
19.31.31103
1931
May 10, 2022
Version 17.2 LTSC
19.32.31326
1932
Jan 9, 2024
Version 17.3
19.33.31629
1933
Nov 8, 2022
Version 17.4.14 LTSC
19.34.31948
1934
Jul 11, 2024
Version 17.5.3
19.35.32216
1935
May 16, 2023
Version 17.6.11 LTSC
19.36.32544
1936
Jan 9, 2025
Version 17.7.7
19.37.32826
1937
Nov 14, 2023
Version 17.8.6 LTSC
19.38.33135
1938
Jul 8, 2025
Version 17.9
19.39.xxxxx
1939
TBD
Version 17.10
19.40.xxxxx
1940
TBD
…
…
…
…
_MSC_VER 使用举例
拿到一个别人给的静态库文件 foo.lib (不是 dll 配套的导入库),反推出编译它的 MSVC 编译器版本
进入 Developer PowerShell for VS 2022, 执行:
dumpbin /all foo.lib | findstr _MSC_VER
输出举例:
00000040: 4D 41 54 43 48 3A 22 5F 4D 53 43 5F 56 45 52 3D MATCH:"_MSC_VER=
/FAILIFMISMATCH:_MSC_VER=1900
00000010: 43 48 3A 22 5F 4D 53 43 5F 56 45 52 3D 31 39 30 CH:"_MSC_VER=190
/FAILIFMISMATCH:_MSC_VER=1900
00000010: 43 48 3A 22 5F 4D 53 43 5F 56 45 52 3D 31 39 30 CH:"_MSC_VER=190
/FAILIFMISMATCH:_MSC_VER=1900
00000010: 43 48 3A 22 5F 4D 53 43 5F 56 45 52 3D 31 39 30 CH:"_MSC_VER=190
/FAILIFMISMATCH:_MSC_VER=1900
其中 _MSC_VER=1900 表明是 VS2015 编译的。
References
https://cmake.org/cmake/help/latest/variable/MSVC_TOOLSET_VERSION.html
https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html
https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-160
https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/
https://blog.csdn.net/jia463223499/article/details/104710980