diff options
author | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-08-02 15:55:21 +0300 |
---|---|---|
committer | Ivan Komissarov <ABBAPOH@gmail.com> | 2021-08-03 20:45:44 +0000 |
commit | 57bc6d8d9613f257b899fe8b94660142d4f91c07 (patch) | |
tree | 558a5d9ae7f673adb3afa1f58802f7588f67cd86 /share/qbs/modules/cpp/msvc.js | |
parent | e8b7cac678652bc2e1b9bcce5d808988a5b86982 (diff) | |
download | qbs-57bc6d8d9613f257b899fe8b94660142d4f91c07.tar.gz |
msvc: fix passing /Zc:__cplusplus flag
It is mandatory to pass /Zc:__cplusplus when building
with Qt 6.2 and MSVC.
Fixes: QBS-1655
Change-Id: I27d928a568d0ac2075ce3f77f4142e20342be358
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'share/qbs/modules/cpp/msvc.js')
-rw-r--r-- | share/qbs/modules/cpp/msvc.js | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/share/qbs/modules/cpp/msvc.js b/share/qbs/modules/cpp/msvc.js index 1ebe5173b..3e528ddee 100644 --- a/share/qbs/modules/cpp/msvc.js +++ b/share/qbs/modules/cpp/msvc.js @@ -83,6 +83,19 @@ function hasCxx17Option(input) || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 7); } +function hasZCplusPlusOption(input) +{ + // /Zc:__cplusplus is supported starting from Visual Studio 15.7 + // Looks like closest MSVC version is 14.14.26428 (cl ver 19.14.26433) + // At least, this version is tested + // https://docs.microsoft.com/en-us/cpp/build/reference/zc-cplusplus + // clang-cl supports this option starting around-ish versions 8/9, but it + // ignores this option, so this doesn't really matter + // https://reviews.llvm.org/D45877 + return Utilities.versionCompare(input.cpp.compilerVersion, "19.14.26433") >= 0 + || (input.qbs.toolchain.contains("clang-cl") && input.cpp.compilerVersionMajor >= 9); +} + function supportsExternalIncludesOption(input) { if (input.qbs.toolchain.contains("clang-cl")) return false; // Exclude clang-cl. @@ -240,6 +253,9 @@ function prepareCompiler(project, product, inputs, outputs, input, output, expli if (input.cpp.generateCompilerListingFiles) args.push("/Fa" + FileInfo.toWindowsSeparators(outputs.lst[0].filePath)); + if (input.cpp.enableCxxLanguageMacro && hasZCplusPlusOption(input)) + args.push("/Zc:__cplusplus"); + var objectMap = outputs.obj || outputs.intermediate_obj var objOutput = objectMap ? objectMap[0] : undefined args.push('/Fo' + FileInfo.toWindowsSeparators(objOutput.filePath)) |