文章
问答
冒泡
QT6 解决msvc编译需要c++17问题

在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


编译成功

Qt

关于作者

落雁沙
非典型码农
获得点赞
文章被阅读