C如何在C++; < >我想将编译器C++标准设置为GNU++ 17,但我不能用< Case> CMACHYCXXX标准< /代码>,因为它给我 GNU+17 无效值。因此我把它放在了 CMACHYCXXFLAG/中。但是,当我编译cmake时,会在命令末尾添加如下内容:- /bin/g++ -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie -fPIC -std=gnu++11 -o /path/to/main.cpp.o -c /blah/blahfeeelk

C如何在C++; < >我想将编译器C++标准设置为GNU++ 17,但我不能用< Case> CMACHYCXXX标准< /代码>,因为它给我 GNU+17 无效值。因此我把它放在了 CMACHYCXXFLAG/中。但是,当我编译cmake时,会在命令末尾添加如下内容:- /bin/g++ -Wall -Wpedantic -Wextra -std=gnu++14 -no-pie -fPIC -std=gnu++11 -o /path/to/main.cpp.o -c /blah/blahfeeelk,c++,cmake,standards,compiler-flags,C++,Cmake,Standards,Compiler Flags,因此,std=gnu++11win。因此,我们希望在末尾附加gnu++17。 我该怎么做? (我已经修剪了原始命令)< P> CMake有三个变量来控制C++标准的版本,并切换编译器扩展ON/OFF。我在这里展示的是特定于目标的版本,因为这就是在现代(v3.x)CMake中应该如何使用它 这将启用C++17,防止在17不可用时自动回退到早期标准,并启用编译器扩展。对于GCC,这相当于-std=gnu++17或-std=gnu++1z 从CMake 3.8开始,就可以使用17值。自CMake 3.

因此,
std=gnu++11
win。因此,我们希望在末尾附加
gnu++17
。 我该怎么做?
(我已经修剪了原始命令)

< P> CMake有三个变量来控制C++标准的版本,并切换编译器扩展ON/OFF。我在这里展示的是特定于目标的版本,因为这就是在现代(v3.x)CMake中应该如何使用它

这将启用C++17,防止在17不可用时自动回退到早期标准,并启用编译器扩展。对于GCC,这相当于
-std=gnu++17
-std=gnu++1z


从CMake 3.8开始,就可以使用
17
值。自CMake 3.1以来就存在。

这只适用于CMake列出的std版本。它不适用于c++2a。这方面的解决方案会很好(因为在我的例子中,有些东西一直在添加
-std=gnu++11
标志)
add_executable(foo main.cpp)
set_target_properties(foo PROPERTIES
    CXX_STANDARD 17
    CXX_STANDARD_REQUIRED ON
    CXX_EXTENSIONS ON
)