Reputation: 2648
I have a qt project containing parts in C++14
.
Recently, I changed my ubuntu distro. Now I have 16.04 LTS and I installed Qt creator 4.02 (built on jun 13).
In order to enable C++14
compilation, I put in the project file:
QMAKE_CXXFLAGS += -std=c++14
However, when building project, the IDE generates the following command:
g++ -c -pipe -std=c++14 -g -O0 -g -std=gnu++11 -Wall -W -D_REENTRANT ...
As seen, the generated makefile
puts the flag -std=gnu++11
which overrides the flag for C++14
. This did not happen with my previous distro (LTS 12.04, same qt creator version).
I tried with
CONFIG += -std=c++14
But the behavior is the same.
Could someone give any clue?
Upvotes: 7
Views: 5211
Reputation: 16731
You can fix it radically. By changing config files.
First of all you need the library path, used in your project. The path you can determine looking at Projects panel (Ctrl + 5
) and remembering the name of a "Kit" over the (Build|Run)
buttons, then follow the Tools -> Options -> Build & Run -> Kits
, select the "Kit" you remember previously, then you can see Qt version:
line contents, after that on Qt versions
tab you can see the corresponding full library path you need. In my case I see /usr/local/Qt-5.4.1/
.
In /usr/local/Qt-5.4.1/mkspecs/common/g++-base.conf
file (you may have another path for Qt library installed), you can change QMAKE_CXXFLAGS_CXX11
or QMAKE_CXXFLAGS_CXX14
(if any) variable to whatever you want (say, to -std=gnu++1z
).
For clang the path became /usr/local/Qt-5.4.1/mkspecs/common/clang.conf
in my case.
For some other targets/compilers you may should to follow Tools -> Options -> Build & Run -> Kits -> (select Kit you use) -> (look at 'Qt mkspec:' line at bottom)
then find in /usr/local/Qt-5.4.1/mkspecs/*/qmake.conf
(where *
is Qt mkspec:
line contents) and in all included *.conf
files a string QMAKE_CXXFLAGS_CXX11
or QMAKE_CXXFLAGS_CXX14
, that you need. Then change its value appropriately.
Then of course you need to use CONFIG += c++11
or CONFIG += c++14
, as Jon Harper mentioned in his answer.
Upvotes: 2