在QT 工程中,使用msvc作为编译器的时候,遇到如下报错
D:\develop\program\Qt\6.3.0\msvc2019_64\include\QtCore\qglobal.h:123: error: C1189: #error: "Qt requires a C++17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."
这是因为QT 6之后要使用C++17来进行编译。
解决方案:
找到文件 Qt\6.3.0\msvc2019_64\mkspecs\common\msvc-version.conf
其中看到有这一段
isEmpty(QMAKE_MSC_VER): error("msvc-version.conf loaded but QMAKE_MSC_VER isn't set")
这里说明需要设置QMAKE_MSC_VER的值,也就是MSC的版本,那么这个值要怎么设置?根据情况,我们是需要设置c++17
往下看,可以看到这部分内容
greaterThan(QMAKE_MSC_VER, 1909) {
# Visual Studio 2017 (15.0) / Visual C++ 19.10 and up
MSVC_VER = 15.0
MSVC_TOOLSET_VER = 141
COMPAT_MKSPEC = win32-msvc2017
QMAKE_CXXFLAGS += -permissive-
# Only Visual Studio 2017 version 15.3 / Visual C++ 19.11 & up have support
# for AVX-512. We enable the switches anyway and let configure check if they
# work.
QMAKE_CFLAGS_AVX512F = -arch:AVX512
QMAKE_CFLAGS_AVX512ER = -arch:AVX512
QMAKE_CFLAGS_AVX512CD = -arch:AVX512
QMAKE_CFLAGS_AVX512PF = -arch:AVX512
QMAKE_CFLAGS_AVX512DQ = -arch:AVX512
QMAKE_CFLAGS_AVX512BW = -arch:AVX512
QMAKE_CFLAGS_AVX512VL = -arch:AVX512
QMAKE_CFLAGS_AVX512IFMA = -arch:AVX512
QMAKE_CFLAGS_AVX512VBMI = -arch:AVX512
# MSVC partially supports the following, but '__cplusplus' definition is set
# as for C++98 until MSVC fully conforms with C++14, see
# https://developercommunity.visualstudio.com/content/problem/139261/msvc-incorrectly-defines-cplusplus.html
# Support became available in MSVC 2017 15.7:
greaterThan(QMAKE_MSC_VER, 1913) {
QMAKE_CXXFLAGS += -Zc:__cplusplus
QMAKE_CXXFLAGS_CXX14 = -std:c++14
QMAKE_CXXFLAGS_CXX1Z = -std:c++17
}
}
当 QMAKE_MSC_VER 大于1913的时候,将设置QMAKE_CXXFLAGS_CXX1Z = -std:c++17 看起来就是这个,所以,我们设置
QMAKE_MSC_VER = 1914
编译成功