我可以将 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/