17

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?

4

2 回答 2

25

我试图设置 CMAKE_C_FLAGS

根据文档,为所有构建类型CMAKE_C_FLAGS设置 C 语言标志。对于 C++,您需要改用:CMAKE_CXX_FLAGS

set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
于 2014-10-11T18:46:36.183 回答
11

对于 CMake 3.1 或更高版本,您可以CMAKE_CXX_STANDARD变量设置为11

CXX_STANDARD目标属性的默认值。

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

CXX_STANDARD文档

要求其特性来构建此目标的 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如果在创建目标时设置了该属性,则该属性由变量的值初始化。

于 2015-02-18T19:48:11.947 回答