我可以将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_CXX_STANDARD
实际上是唯一的“与工具链无关”的设置C++版本的方式。不幸的是,它只允许特定的预定义值。此外,据我所知,GCC和Clang都没有“最新”的标准选项。 - Some programmer dude-std=c++1z
或-std=c++2a
,它们将永久存在,并最终成为-std=c++17
和-std=c++20
的别名。另一方面,/std:c++latest
则是一个不断变化的目标。在C++20之后,它将变成GCC和Clang可能称之为-std=c++2b
的东西。我认为我更喜欢GCC / Clang的方式,因为Botje和Peter在他们的评论中正确指出了原因。 - Marc Mutz - mmutz