【问题标题】:How to enable C++11 in CLion?如何在 CLion 中启用 C++11?
【发布时间】:2014-12-06 17:15:11
【问题描述】:

我正在尝试在 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 代码?

【问题讨论】:

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


    【解决方案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 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 变量的值,则该属性将被初始化。

    【讨论】:

    • 如果我想要-std=c++11 而不是-std=gnu++11CXX_STANDARD 11 如何区分两者?
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多