| # |
| # qmake configuration for Microsoft Visual Studio C/C++ Compiler |
| # This file is used by win32-msvc and all winrt-XXX-msvcXXX specs |
| # |
| |
| # |
| # Version-specific changes |
| # |
| |
| isEmpty(QMAKE_MSC_VER): error("msvc-version.conf loaded but QMAKE_MSC_VER isn't set") |
| |
| MSVC_VER = 8.0 |
| COMPAT_MKSPEC = win32-msvc2005 |
| |
| greaterThan(QMAKE_MSC_VER, 1499) { |
| # Visual Studio 2008 (9.0) / Visual C++ 15.0 and up |
| MSVC_VER = 9.0 |
| COMPAT_MKSPEC = win32-msvc2008 |
| QMAKE_CFLAGS_MP = -MP |
| QMAKE_CXXFLAGS_MP = $$QMAKE_CFLAGS_MP |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1599) { |
| # Visual Studio 2010 (10.0) / Visual C++ 16.0 and up |
| MSVC_VER = 10.0 |
| COMPAT_MKSPEC = win32-msvc2010 |
| MAKEFILE_GENERATOR = MSBUILD |
| |
| QMAKE_CFLAGS_AVX = -arch:AVX |
| QMAKE_CFLAGS_AVX2 = -arch:AVX |
| |
| VCPROJ_EXTENSION = .vcxproj |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1699) { |
| # Visual Studio 2012 (11.0) / Visual C++ 17.0 and up |
| MSVC_VER = 11.0 |
| COMPAT_MKSPEC = win32-msvc2012 |
| QMAKE_CXXFLAGS_EXCEPTIONS_OFF = /wd4530 /wd4577 |
| QT_CONFIG += c++11 |
| CONFIG += c++11 |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1799) { |
| # Visual Studio 2013 (12.0) / Visual C++ 18.0 and up |
| MSVC_VER = 12.0 |
| COMPAT_MKSPEC = win32-msvc2013 |
| QMAKE_CFLAGS += -FS |
| QMAKE_CXXFLAGS += -FS -Zc:rvalueCast -Zc:inline |
| |
| QMAKE_CFLAGS_F16C = -arch:AVX |
| QMAKE_CFLAGS_RDRND = |
| QMAKE_CFLAGS_RDSEED = |
| |
| equals(QMAKE_MSC_VER, 1800) { |
| QMAKE_CFLAGS_RELEASE += -Zc:strictStrings |
| QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings |
| QMAKE_CXXFLAGS_RELEASE += -Zc:strictStrings |
| QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -Zc:strictStrings |
| } |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1899) { |
| # Visual Studio 2015 (14.0) / Visual C++ 19.0 and up |
| MSVC_VER = 14.0 |
| COMPAT_MKSPEC = win32-msvc2015 |
| QMAKE_CFLAGS += -Zc:strictStrings |
| QMAKE_CFLAGS_WARN_ON += -w44456 -w44457 -w44458 |
| QMAKE_CFLAGS_AVX2 = -arch:AVX2 |
| QMAKE_CXXFLAGS += -Zc:strictStrings -Zc:throwingNew |
| QMAKE_CXXFLAGS_WARN_ON += -w44456 -w44457 -w44458 -wd4577 -wd4467 |
| |
| # -utf-8 compiler option for Visual Studio 2015 Update 2 |
| greaterThan(QMAKE_MSC_FULL_VER, 190023918): QMAKE_CFLAGS_UTF8_SOURCE = -utf-8 |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1909) { |
| # Visual Studio 2017 (15.0) / Visual C++ 19.10 and up |
| MSVC_VER = 15.0 |
| COMPAT_MKSPEC = win32-msvc2017 |
| QMAKE_CXXFLAGS += -Zc:referenceBinding |
| |
| # 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 |
| |
| # For now permissive fails as soon as UWP API comes into play. In qtbase this |
| # API is used in direct2d, but also in multimedia, positioning and sensors. |
| # We can try again with a later version of Visual Studio. |
| # QMAKE_CXXFLAGS_STRICTCXX = -permissive- |
| |
| # 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 |
| } |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1910) { |
| # No compat spec past MSVC 2017 |
| COMPAT_MKSPEC = |
| } |
| |
| greaterThan(QMAKE_MSC_VER, 1919) { |
| # Visual Studio 2019 (16.0) / Visual C++ 19.20 and up |
| MSVC_VER = 16.0 |
| QMAKE_CXXFLAGS_CXX2A = -std:c++latest |
| |
| } |
| |
| !isEmpty(COMPAT_MKSPEC):!$$COMPAT_MKSPEC: CONFIG += $$COMPAT_MKSPEC |