MSVC 踩坑记录:`set(CMAKE_CXX_STANDARD)` 需要设置 `/Zc:__cplusplus`

发布时间 2023-04-02 10:28:22作者: 沐灵_hh

[MSVC 踩坑记录] set(CMAKE_CXX_STANDARD) 需要设置 /Zc:__cplusplus

最近在使用 MSVC 编译项目 CFSApp 的时候,eigen 总是报错说我 C++ 语言标准太低,在 cmakelists 中写了 set(CMAKE_CXX_STANDARD 17) 也不行,后来发现是 MSVC 的问题。

在使用 MSVC 的时候,如果没有带上 /Zc:__cplusplus 选项, 宏 __cplusplus 则会一直是 199711L (即使你用 /std 选项或在 cmake 中 set(CMAKE_CXX_STANDARD) 设置了语言标准,如c++17, c++20等)。

这使得一些依赖宏 __cplusplus 判断 C++ 语言标准的库可能无法编译通过。

题外话:尽量也加上 /permissive- 选项,来禁止使用 MSVC 独有的扩展,提升通用性。

参考链接