首页 > 解决方案 > 有没有办法在 CMake 配置中禁止“实验性”C++17?

问题描述

我在 CMakeLists.txt 中设置了以下内容:

set (CMAKE_CXX_STANDARD 17)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set (CMAKE_CXX_EXTENSIONS OFF)

但是,CMake 仍然允许 g++ 6,即使它不完全支持 c++17(它有 c++1z 标准,但不是 c++17 标准)。有没有办法告诉 CMake 只允许完全支持标准的编译器,而不仅仅是它的一部分?

FWIW,我也尝试设置 cxx_relaxed_constexpr,我认为这应该是相关的语言功能,但这仍然允许 g++ 6。但它显然无法编译代码

if constexpr (ENABLE_LOGGING) { do_loggy_stuff() };

因此,我不确定是否应该寻找更新的 constexpr 功能(最新的 cmake 中似乎没有),或者 CMake 是否只是对 GCC 6 的功能感到困惑。

编辑:看来我有点困惑。尽管 GCC 6 没有将 c++17 记录为 -std 的值,但它确实接受它作为 c++-1z 的同义词。所以我想我正在寻找的是一种只寻找“非实验性”c++17支持的方法。

另外,查看 GCC 文档,我想要的功能似乎是“constexpr if”。不幸的是,CMake 不能识别cxx_constexpr_ifcxx_if_constexpr作为有效的编译功能。

标签: cmakec++17

解决方案


有没有办法告诉 CMake 只允许完全支持标准的编译器,而不仅仅是它的一部分?

不,CMake 没有该信息。


推荐阅读