如何在CLion中启用C ++ 11?

时间:2014-10-11 18:43:30

标签: c++ c++11 cmake clion

我正在尝试在CLion中运行C ++ 11代码,但它不起作用。它说:

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

我尝试将CMAKE_C_FLAGS设置为-std=c++11-std=gnu++11,但我仍然遇到同样的问题。常规C ++代码编译得很好。

我必须在CLion的CMake窗口中设置什么标志来编译我的C ++ 11代码?

2 个答案:

答案 0 :(得分:18)

  

我尝试设置CMAKE_C_FLAGS

根据所有documentationbuild types CMAKE_C_FLAGS设置C语言标记。对于C ++,您需要使用CMAKE_CXX_FLAGS代替:

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

答案 1 :(得分:10)

对于CMake 3.1或更高版本,您可以set the CMAKE_CXX_STANDARD variable11

  

目标的CXX_STANDARD属性的默认值。

     

此变量用于初始化所有目标上的CXX_STANDARD属性。

CXX_STANDARD documentation

  

要求其功能构建此目标的C ++标准。

     

此属性指定要求其功能构建此目标的C ++标准。对于某些编译器,这会导致在编译行中添加-std=gnu++11等标志。

     

支持的值为98,11和14。

     

如果请求的值不会导致为正在使用的编译器添加编译标志,则会添加先前的标准标志。这意味着使用:

set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
     

使用不支持-std=gnu++11的编译器或等效标志不会导致错误或警告,但如果支持则会添加-std=gnu++98标志。可以使用CXX_STANDARD_REQUIRED目标属性控制此“衰减”行为。

     

有关编译功能的信息,请参阅cmake-compile-features(7)手册。

     

如果在创建目标时设置了CMAKE_CXX_STANDARD变量的值,则此属性将初始化。