From de2395d757fb80a92dfb2572f4c249e370fba37f Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 9 Nov 2021 14:05:04 +0100 Subject: [PATCH] qmake: Support Visual Studio 2022 Extend the detection of the MSCV_VER variable and make VS 2022 known to the vcxproj generator. [ChangeLog][qmake] Added support for Visual Studio 2022. Fixes: QTBUG-97975 Change-Id: Id2c0a0b7800f721e9e34189f0a40ba4830283578 Reviewed-by: Alexandru Croitor (cherry picked from commit 1c880752eb891e77c3d3b5ffbf60fbb9109120fb) Reviewed-by: Qt Cherry-pick Bot --- mkspecs/common/msvc-based-version.conf | 5 +++++ mkspecs/common/msvc-version.conf | 5 +++++ qmake/generators/win32/msvc_objectmodel.cpp | 2 ++ qmake/generators/win32/msvc_objectmodel.h | 3 ++- qmake/generators/win32/msvc_vcproj.cpp | 10 ++++++++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/mkspecs/common/msvc-based-version.conf b/mkspecs/common/msvc-based-version.conf index b53e3b61aab..ba72c3a0ac3 100644 --- a/mkspecs/common/msvc-based-version.conf +++ b/mkspecs/common/msvc-based-version.conf @@ -34,4 +34,9 @@ greaterThan(QMAKE_MSC_VER, 1919) { MSVC_VER = 16.0 } +greaterThan(QMAKE_MSC_VER, 1929) { + # Visual Studio 2022 (17.0) / Visual C++ 19.30 and up + MSVC_VER = 17.0 +} + !isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf index b3689dec413..fda50faabfe 100644 --- a/mkspecs/common/msvc-version.conf +++ b/mkspecs/common/msvc-version.conf @@ -124,4 +124,9 @@ greaterThan(QMAKE_MSC_VER, 1927) { QMAKE_CFLAGS_C17 = /std:c17 } +greaterThan(QMAKE_MSC_VER, 1929) { + # Visual Studio 2022 (17.0) / Visual C++ 19.30 and up + MSVC_VER = 17.0 +} + !isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp index c8b25fe61de..a18eb076bd9 100644 --- a/qmake/generators/win32/msvc_objectmodel.cpp +++ b/qmake/generators/win32/msvc_objectmodel.cpp @@ -50,6 +50,8 @@ DotNET vsVersionFromString(const ProString &versionString) int versionMajor = versionView.left(idx).toInt(); int versionMinor = versionView.mid(idx + 1).toInt(); + if (versionMajor == 17) + return NET2022; if (versionMajor == 16) return NET2019; if (versionMajor == 15) diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h index f239da84732..c5da1ec3ed1 100644 --- a/qmake/generators/win32/msvc_objectmodel.h +++ b/qmake/generators/win32/msvc_objectmodel.h @@ -53,7 +53,8 @@ enum DotNET { NET2013 = 0xc0, NET2015 = 0xd0, NET2017 = 0xe0, - NET2019 + NET2019, + NET2022 }; DotNET vsVersionFromString(const ProString &versionString); diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp index 0470d6d55c7..25246340535 100644 --- a/qmake/generators/win32/msvc_vcproj.cpp +++ b/qmake/generators/win32/msvc_vcproj.cpp @@ -78,6 +78,8 @@ const char _slnHeader141[] = "Microsoft Visual Studio Solution File, Format "\n# Visual Studio 15"; const char _slnHeader142[] = "Microsoft Visual Studio Solution File, Format Version 12.00" "\n# Visual Studio Version 16"; +const char _slnHeader143[] = "Microsoft Visual Studio Solution File, Format Version 12.00" + "\n# Visual Studio Version 17"; // The following UUID _may_ change for later servicepacks... // If so we need to search through the registry at // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.0\Projects @@ -311,6 +313,8 @@ QString VcprojGenerator::retrievePlatformToolSet() const return QStringLiteral("v141"); case NET2019: return QStringLiteral("v142"); + case NET2022: + return QStringLiteral("v143"); default: return QString(); } @@ -538,6 +542,9 @@ void VcprojGenerator::writeSubDirs(QTextStream &t) } switch (vcProject.Configuration.CompilerVersion) { + case NET2022: + t << _slnHeader143; + break; case NET2019: t << _slnHeader142; break; @@ -915,6 +922,9 @@ void VcprojGenerator::initProject() // Own elements ----------------------------- vcProject.Name = project->first("QMAKE_ORIG_TARGET").toQString(); switch (vcProject.Configuration.CompilerVersion) { + case NET2022: + vcProject.Version = "17.00"; + break; case NET2019: vcProject.Version = "16.00"; break;