如何在 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++11CXX_STANDARD 11 如何区分两者?

以上是关于如何在 CLion 中启用 C++11?的主要内容,如果未能解决你的问题,请参考以下文章

Windows + VS2019 + CMake + CLion + Conan:如何启用C++20?

如何转储 CLion 的默认 clang-tidy 配置?

如何安装配置clion开发环境

如何修复 Clion 中目标错误的配方?

clion中C项目交叉编译说明

如何在 Eclipse Neon 中启用 C++11 语法?