C++ 如何启用C++;克莱恩11号?
我试图在CLion中运行C++11代码,但它不起作用。它说:C++ 如何启用C++;克莱恩11号?,c++,c++11,cmake,clion,C++,C++11,Cmake,Clion,我试图在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++代码编译精细.< /p> 我必须在CLion的CMake窗口中设置什么标
...
/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++代码编译精细.< /p>
我必须在CLion的CMake窗口中设置什么标志来编译我的C++11代码
我试图设置CMAKE_C_标志
根据CMAKE_C_标志
为所有设置C语言标志。对于C++,您需要使用<代码> CMACHYCXXFLAG < /COD> >:< /P>
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
对于CMake 3.1或更高版本,您可以转到
11
:
目标的CXX\u标准属性的默认值
此变量用于初始化所有目标上的CXX\u标准
属性
:
C++的标准,其特征要求构建该目标。
此属性指定C++特性,其特性要求构建该目标。对于某些编译器,这会导致在编译行中添加一个标志,例如
-std=gnu++11
支持的值为98、11和14
如果请求的值未导致为正在使用的编译器添加编译标志,则将添加以前的标准标志。这意味着使用:
set_property(TARGET tgt PROPERTY CXX_STANDARD 11)
如果编译器不支持-std=gnu++11
或等效标志,则不会导致错误或警告,而是会添加-std=gnu++98
标志(如果支持)。此“衰减”行为可以通过目标属性进行控制
有关编译功能的信息,请参阅手册
如果在创建目标时设置了CMAKE\u CXX\u STANDARD
变量,则此属性由该变量的值初始化
变量CMAKE\u CXX\u标志设置在哪里?我对CMake不太熟悉。@hlin117,“CMake_CXX_FLAGS”位于文件“CmakeList”中。我在发布后注意到我的问题有多不清楚,对不起。我想问的是,在集合(CMAKE_CXX_FLAGS“${CMAKE_CXX_FLAGS}-std=c++11”)
行中,第二个CMAKE_CXX_FLAGS
必须在被引用之前进行初始化(使用$
),但它在哪里初始化?(我无法想象这个变量是在同一行上初始化和引用的。)@hlin117,简单的回答是,您不必担心以前初始化或声明这些变量。若变量存在,将使用它,若不存在,则将替换空字符串。通常这种形式的声明允许更改现有变量的值,而不是重写。为了启用C++14,我尝试了-std=C++14
,但它不起作用。有什么想法吗?如果我想要-std=c++11
而不是-std=gnu++11
,那么CXX\U标准11
如何区分两者?