cmake - 有没有办法在 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_if
或cxx_if_constexpr
作为有效的编译功能。
解决方案
有没有办法告诉 CMake 只允许完全支持标准的编译器,而不仅仅是它的一部分?
不,CMake 没有该信息。
推荐阅读
- nginx - unknown directive "state" in nginx 1.17.7
- database - DB21015E The Command Line Processor backend process request queue or input queue was not created within the timeout period
- go - time.Location() returns as "Local" even if /etc/localtime is correct
- javascript - 尽管已经在 vuejs 的 for 循环中创建了复选框,但单独检查和取消选中复选框
- ubuntu - 使用 gnuplot 绘制进程树
- haskell - Is this idiomatic Haskell - Two Sum Question
- javascript - JS 在 iOS 设备上无法正常工作 - 仅有时
- php - 将集合中的值相乘
- java - 我怎样才能在java中更快地做到这一点?复制长字符串的字符
- c++ - 三向比较取代了除 == 之外的所有其他比较运算符?