如何在 CLion 中启用 C++11?
Posted
技术标签:
【中文标题】如何在 CLion 中启用 C++11?【英文标题】:How to enable C++11 in CLion? 【发布时间】:2014-10-11 18:43:29 【问题描述】:我正在尝试在 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 代码?
【问题讨论】:
【参考方案1】:我尝试设置 CMAKE_C_FLAGS
根据documentationCMAKE_C_FLAGS
为所有build types设置C语言标志。对于 C++,您需要改用 CMAKE_CXX_FLAGS
:
set (CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
【讨论】:
变量CMAKE_CXX_FLAGS
在哪里设置?我对 CMake 不太熟悉。
@hlin117, 'CMAKE_CXX_FLAGS' 位于文件 'CMakeLists' 中。
我注意到我的问题在发布后有多不清楚,抱歉。我的意思是,在set (CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11")
行中,第二个CMAKE_CXX_FLAGS
必须在它被引用之前被初始化(使用$
),但是它在哪里初始化呢? (我无法想象变量在同一行被初始化和引用。)
@hlin117,简短的回答是你不应该担心以前的初始化或声明这些变量。如果变量存在,它将被使用,如果不存在,则将替换空字符串。通常这种形式的声明允许改变现有变量的值而不是重写。
为了启用 C++14,我尝试了-std=c++14
,但它不起作用。有什么想法吗?【参考方案2】:
对于 CMake 3.1 或更高版本,您可以 set the CMAKE_CXX_STANDARD
variable 到 11
:
目标的
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
变量的值,则该属性将被初始化。
【讨论】:
如果我想要-std=c++11
而不是-std=gnu++11
,CXX_STANDARD 11
如何区分两者?以上是关于如何在 CLion 中启用 C++11?的主要内容,如果未能解决你的问题,请参考以下文章