How to enable C++11 in CLion?

26,991

Solution 1

I tried to set CMAKE_C_FLAGS

According to the documentation the CMAKE_C_FLAGS set C language flags for all build types. For C++ you need use CMAKE_CXX_FLAGS instead:

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

Solution 2

For CMake 3.1 or later, you can set the CMAKE_CXX_STANDARD variable to 11:

Default value for CXX_STANDARD property of targets.

This variable is used to initialize the CXX_STANDARD property on all targets.

CXX_STANDARD documentation:

The C++ standard whose features are requested to build this target.

This property specifies the C++ standard whose features are requested to build this target. For some compilers, this results in adding a flag such as -std=gnu++11 to the compile line.

Supported values are 98, 11 and 14.

If the value requested does not result in a compile flag being added for the compiler in use, a previous standard flag will be added instead. This means that using:

set_property(TARGET tgt PROPERTY CXX_STANDARD 11)

with a compiler which does not support -std=gnu++11 or an equivalent flag will not result in an error or warning, but will instead add the -std=gnu++98 flag if supported. This “decay” behavior may be controlled with the CXX_STANDARD_REQUIRED target property.

See the cmake-compile-features(7) manual for information on compile features.

This property is initialized by the value of the CMAKE_CXX_STANDARD variable if it is set when a target is created.

Share:
26,991
Pavel
Author by

Pavel

Hi, my name is Pavel. I'm a software engineer and I love programming. Being a part of its community, I'm willing to contribute. I think StackExchange is a great place to share the knowledge everyone has, and I hope what I have shared is helpful for you too.

Updated on July 09, 2022

Comments

  • Pavel
    Pavel almost 2 years

    I'm trying to run C++11 code in CLion but it doesn't work. It says:

    ...
        /projects/CLion/untitled/main.cpp:7:1: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
    ...
    

    I tried to set CMAKE_C_FLAGS to -std=c++11 or -std=gnu++11 but I still have the same problem. Regular C++ code compiles fine.

    What flag do I have to set in CLion's CMake window to compile my C++11 code?

  • hlin117
    hlin117 over 9 years
    Where are the variables CMAKE_CXX_FLAGS set? I'm not too familiar with CMake.
  • Gluttton
    Gluttton over 9 years
    @hlin117, 'CMAKE_CXX_FLAGS' is situated in file 'CMakeLists'.
  • hlin117
    hlin117 over 9 years
    I noticed how unclear my question was after I posted it, sorry. I meant to ask, in the line set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11"), the second CMAKE_CXX_FLAGS has to be initialized before it's referenced (using $), but where is it initialized? (I can't imagine that the variable is both initialized and referenced on the same line.)
  • Gluttton
    Gluttton over 9 years
    @hlin117, short answer is you shouldn't worry about previous initialisation or declaration such variables. If variable is existed it will be used, if not then empty string will be substituted. In generally this form of declaration allow change value of existing variable instead of rewriting.
  • becko
    becko almost 9 years
    To enable C++14 I tried -std=c++14, but it doesn't work. Any ideas?
  • Gluttton
    Gluttton almost 9 years
    @becko, What compiler do you use and what version?
  • Gluttton
    Gluttton almost 9 years
    @becko, It's looks like 4.8.4 not support C++14 (I can't prove this assumption), but you can try use experimental implementation by adding -std=c++y instead.
  • Ela782
    Ela782 over 8 years
    What if I want -std=c++11 and not -std=gnu++11, how does CXX_STANDARD 11 differentiate between the two?
  • U007D
    U007D almost 8 years
    Try -std=c++1y (not just y) for compilers with early C++14 support.