How to prevent MinGW Qt 5.9 kit from adding -std=gnu++11/14/1z to compile flags?
In the previous versions (up to 5.8) all I had to do was add the following to the
CONFIG -= c++11 CONFIG -= c++14
Then, I'd be free to add
QMAKE_CXXFLAGS += -std=c++1zor anything I'd want. Unfortunately, this doesn't seem to be the case in the 5.9 kit.
I created a small testcase: https://github.com/KrzaQ/59test It compiles on mingw kits 5.6 through 5.8 (and I suppose it would compile on some of the older ones as well), but it fails on 5.9, because the following command is issued by make:
mingw32-make: Entering directory '[...]/build-59test-Desktop_Qt_5_9_0_MinGW_32bit-Debug' g++ -c -fno-keep-inline-dllexport -pipe -std=c++14 -g -std=gnu++11 -Wextra -Wall -W -fexceptions -mthreads -DUNICODE -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\59test -I. -IC:\pro\Qt\5.9\mingw53_32\include -IC:\pro\Qt\5.9\mingw53_32\include\QtCore -Idebug -IC:\pro\Qt\5.9\mingw53_32\mkspecs\win32-g++ -o debug\main.o ..\59test\main.cpp
Specifically, this part:
-std=c++14 -g -std=gnu++11
I don't know why
-std=gnu++11is being added, overriding my wishes. I tried looking around for the mkspec, but I found nothing obvious to me.
Any help would be appreciated.
@krzaq I don't know if this helps, but gnu++xx is different than ++xx - gnu++xx adds gnu extensions. Have you tried
CONFIG -= gnu++11
@Eeli-K I don't think this is directly connected (i.e.
CONFIG += c++14works on MSVC, which has different naming scheme entirely).
Nevertheless, I have just tried the following, but it didn't fix my problem:
CONFIG -= c++11 CONFIG -= c++14 CONFIG -= gnu++11 CONFIG -= gnu++14
You have to modify the mkspec to fit your need.
As for MSVC, there's no setting of any standard, the compiler always uses the latest that was implemented by Microsoft.
@SGaist That's not an acceptable solution. Modifying the installation on every machine used to build/develop the project because there's a bug in the new Qt is ridiculous.
Btw: MSVC does, in fact, have a standard switch since the latest version (or maybe one back):
/std:latest. Without it you can't have i.e.