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>
This commit is contained in:
parent
8914f80b27
commit
5e98769602
@ -144,6 +144,7 @@ const char _IntermediateDirectory[] = "IntermediateDirectory";
|
|||||||
const char _KeyContainer[] = "KeyContainer";
|
const char _KeyContainer[] = "KeyContainer";
|
||||||
const char _KeyFile[] = "KeyFile";
|
const char _KeyFile[] = "KeyFile";
|
||||||
const char _LanguageStandard[] = "LanguageStandard";
|
const char _LanguageStandard[] = "LanguageStandard";
|
||||||
|
const char _LanguageStandard_C[] = "LanguageStandard_C";
|
||||||
const char _LargeAddressAware[] = "LargeAddressAware";
|
const char _LargeAddressAware[] = "LargeAddressAware";
|
||||||
const char _LinkDLL[] = "LinkDLL";
|
const char _LinkDLL[] = "LinkDLL";
|
||||||
const char _LinkErrorReporting[] = "LinkErrorReporting";
|
const char _LinkErrorReporting[] = "LinkErrorReporting";
|
||||||
@ -1440,6 +1441,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool)
|
|||||||
<< attrTagT(_MinimalRebuild, tool.MinimalRebuild)
|
<< attrTagT(_MinimalRebuild, tool.MinimalRebuild)
|
||||||
<< attrTagT(_MultiProcessorCompilation, tool.MultiProcessorCompilation)
|
<< attrTagT(_MultiProcessorCompilation, tool.MultiProcessorCompilation)
|
||||||
<< attrTagS(_LanguageStandard, tool.LanguageStandard)
|
<< attrTagS(_LanguageStandard, tool.LanguageStandard)
|
||||||
|
<< attrTagS(_LanguageStandard_C, tool.LanguageStandard_C)
|
||||||
<< attrTagS(_ObjectFileName, tool.ObjectFile)
|
<< attrTagS(_ObjectFileName, tool.ObjectFile)
|
||||||
<< attrTagT(_OmitDefaultLibName, tool.OmitDefaultLibName)
|
<< attrTagT(_OmitDefaultLibName, tool.OmitDefaultLibName)
|
||||||
<< attrTagT(_OmitFramePointers, tool.OmitFramePointers)
|
<< attrTagT(_OmitFramePointers, tool.OmitFramePointers)
|
||||||
|
@ -1151,14 +1151,42 @@ bool VCCLCompilerTool::parseOption(const char* option)
|
|||||||
ShowIncludes = _True;
|
ShowIncludes = _True;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (strlen(option) > 8 && second == 't' && third == 'd') {
|
if (strlen(option) > 7 && second == 't' && third == 'd' && fourth == ':') {
|
||||||
const QString version = option + 8;
|
static const QRegularExpression rex("(c(?:\\+\\+)?)(.+)");
|
||||||
static const QStringList knownVersions = { "14", "17", "latest" };
|
auto m = rex.match(option + 5);
|
||||||
if (knownVersions.contains(version)) {
|
if (m.hasMatch()) {
|
||||||
LanguageStandard = "stdcpp" + version;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
found = false; break;
|
found = false; break;
|
||||||
case 'u':
|
case 'u':
|
||||||
if (!second)
|
if (!second)
|
||||||
|
@ -527,6 +527,7 @@ public:
|
|||||||
inlineExpansionOption InlineFunctionExpansion;
|
inlineExpansionOption InlineFunctionExpansion;
|
||||||
triState KeepComments;
|
triState KeepComments;
|
||||||
QString LanguageStandard;
|
QString LanguageStandard;
|
||||||
|
QString LanguageStandard_C;
|
||||||
triState MinimalRebuild;
|
triState MinimalRebuild;
|
||||||
QString ObjectFile;
|
QString ObjectFile;
|
||||||
triState OmitDefaultLibName;
|
triState OmitDefaultLibName;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user