c++ - 如何在 cmake 中启用 `/std:c++latest`?

标签 c++ visual-c++ cmake

我可以设置CMAKE_CXX_STANDARD17获取 /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 特性,但我需要告诉构建系统启用每个编译器的所有功能。

最佳答案

直到 CMake 3.20.3,如果你要求 C++20,使用 set(CMAKE_CXX_STANDARD 20) , 你会得到 -std: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)
更新:从 CMake 3.20.4 开始,set(CMAKE_CXX_STANDARD 20)让你 -std:c++20 ,所以你需要 set(CMAKE_CXX_STANDARD 23)获取 -std:c++latest -- 假设您的 MSVC 编译器版本是 16.11 Preview 1 或更高版本(请参阅 cmake commit 3aaf1d91bf353)。

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

相关文章:

c++ - 使用 unique_ptrs 的基本前向列表

visual-studio - 将弃用/clr :oldSyntax supported in VS2005 and VS2008 still work with VS2010?

c++ - 基于用户输入的二维动态数组

c++ - "set_unexpected"在VC2010中不起作用?

python - 从 Cmake 的 find_program 中保存可执行文件,以便它可以由 Python 运行

c++ - 如何提高 C++ 中大数 (10^19) 的 pow 精度?

c++ - 这两个查找回文的函数之间的区别

macos - 使用 CMAKE_MACOSX_RPATH 链接构建树外部的库

cmake - 设置 CMake 构建中的线程数

c++ - 将 CMakeLists QT4 更新为 QT5