summaryrefslogtreecommitdiffstats
path: root/qmake/generators/win32
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2021-08-25 11:15:31 +0200
committerJoerg Bornemann <joerg.bornemann@qt.io>2021-08-26 18:32:44 +0200
commit5e98769602c1e7aa6ceeb45ffeee1680c58f4cda (patch)
treea67653f5502d91f64a88abc12ea82bbd9efb6065 /qmake/generators/win32
parent8914f80b278c030b2a6cc505e809b51920e178ce (diff)
qmake/vcxproj generator: Handle C standard compiler flags
Handle the compiler flags /std:c11 and /std:c17 and turn them into the values stdc11 and stc17 for the LanguageStandard_C tag. Drive-by change: Add /std:c++20 to the list of known C++ standard options. Pick-to: 6.2 5.15 Task-number: QTBUG-89296 Change-Id: Ia575fff611bdf795406db84bd34057d008c8a383 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'qmake/generators/win32')
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp2
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp40
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h1
3 files changed, 37 insertions, 6 deletions
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index b5b8a14a9e..97adc85237 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -144,6 +144,7 @@ const char _IntermediateDirectory[] = "IntermediateDirectory";
const char _KeyContainer[] = "KeyContainer";
const char _KeyFile[] = "KeyFile";
const char _LanguageStandard[] = "LanguageStandard";
+const char _LanguageStandard_C[] = "LanguageStandard_C";
const char _LargeAddressAware[] = "LargeAddressAware";
const char _LinkDLL[] = "LinkDLL";
const char _LinkErrorReporting[] = "LinkErrorReporting";
@@ -1440,6 +1441,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool)
<< attrTagT(_MinimalRebuild, tool.MinimalRebuild)
<< attrTagT(_MultiProcessorCompilation, tool.MultiProcessorCompilation)
<< attrTagS(_LanguageStandard, tool.LanguageStandard)
+ << attrTagS(_LanguageStandard_C, tool.LanguageStandard_C)
<< attrTagS(_ObjectFileName, tool.ObjectFile)
<< attrTagT(_OmitDefaultLibName, tool.OmitDefaultLibName)
<< attrTagT(_OmitFramePointers, tool.OmitFramePointers)
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index bb471db4b3..ef00e0d9e8 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -1151,12 +1151,40 @@ bool VCCLCompilerTool::parseOption(const char* option)
ShowIncludes = _True;
break;
}
- if (strlen(option) > 8 && second == 't' && third == 'd') {
- const QString version = option + 8;
- static const QStringList knownVersions = { "14", "17", "latest" };
- if (knownVersions.contains(version)) {
- LanguageStandard = "stdcpp" + version;
- break;
+ if (strlen(option) > 7 && second == 't' && third == 'd' && fourth == ':') {
+ static const QRegularExpression rex("(c(?:\\+\\+)?)(.+)");
+ auto m = rex.match(option + 5);
+ if (m.hasMatch()) {
+ QString *var = nullptr;
+ const QStringList *knownVersions = nullptr;
+ QString valuePrefix;
+ auto lang = m.capturedView(1);
+ auto version = m.capturedView(2);
+ if (lang == QStringLiteral("c++")) {
+ // Turn /std:c++17 into <LanguageStandard>stdcpp17</LanguageStandard>
+ static const QStringList knownCxxVersions = {
+ "14",
+ "17",
+ "20",
+ "latest"
+ };
+ var = &LanguageStandard;
+ knownVersions = &knownCxxVersions;
+ valuePrefix = "stdcpp";
+ } else if (lang == QStringLiteral("c")) {
+ // Turn /std:c17 into <LanguageStandard_C>stdc17</LanguageStandard_C>
+ static const QStringList knownCVersions = {
+ "11",
+ "17"
+ };
+ var = &LanguageStandard_C;
+ knownVersions = &knownCVersions;
+ valuePrefix = "stdc";
+ }
+ if (var && knownVersions->contains(version)) {
+ *var = valuePrefix + version;
+ break;
+ }
}
}
found = false; break;
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index 84f76ce224..f239da8473 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -527,6 +527,7 @@ public:
inlineExpansionOption InlineFunctionExpansion;
triState KeepComments;
QString LanguageStandard;
+ QString LanguageStandard_C;
triState MinimalRebuild;
QString ObjectFile;
triState OmitDefaultLibName;