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