我正在尝试在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代码?
答案 0 :(得分:18)
我尝试设置CMAKE_C_FLAGS
根据所有documentation的build 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
variable到11
:
目标的
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
变量的值,则此属性将初始化。