我可以将 CMAKE_CXX_STANDARD 设置为 17 以获得 /std:c++17 ,但我不能将其设置为 latest ,可以吗?我想我可以暴力破解它

if (MSVC)
    add_compiler_options(/std:c++latest)
endif()
当然,但是有没有一种惯用的方法来获取 /std:c++latest ,甚至可能与工具链无关?
编辑 为什么有人想要这个?与 Clang 和 GCC 不同,MSVC 似乎没有定义 /std:c++2a 来启用 C++17 后的特性。它只是为此使用 /std:c++latest 。如果我正在使用一组已知的编译器构建代码库,我知道我可以使用哪些 C++20 功能,但我需要告诉构建系统启用每个编译器的所有功能。

最佳答案

现在,如果你要求 C++20,你会得到 C++latest。

  if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 19.12.25835)
    set(CMAKE_CXX20_STANDARD_COMPILE_OPTION "-std:c++latest")
    set(CMAKE_CXX20_EXTENSION_COMPILE_OPTION "-std:c++latest")
  endif()
(来自 cmake 源代码中的 Modules/Compiler/MSVC-CXX.cmake)
但很明显,我们可以期待这一天会改变。

关于c++ - 如何在 cmake 中启用 `/std:c++latest`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64889383/

10-11 21:32