[英]GCC 11: How to tell CMake I don't want the default C++ GNU extensions?
所以,回到 GCC 10.2(它使用 C++14 作为默认值),我可以用它来告诉 CMake 我想要-std=gnu++17
1g:
target_compile_features(mytarget PRIVATE cxx_std_17)
set_target_properties(mytarget PROPERTIES
CXX_STANDARD_REQUIRED ON
)
...我实际上不想要,所以我使用CXX_EXTENSIONS OFF
来强制-std=c++17
:
target_compile_features(mytarget PRIVATE cxx_std_17)
set_target_properties(mytarget PROPERTIES
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF # -std=c++17 instead of gnu++17
)
输入 GCC 11.1。 现在默认是 ISO C++ 标准的 2017 版本,因此上面的第一个片段不会为 GCC 生成任何-std
标志,它与 Z32D8B233E3C58A262A0B7517 手册页兼容:97D8'
c++17
: 2017 ISO C++ 标准加上修正案。
gnu++17
:-std=c++17
的 GNU 方言。 这是 C++ 代码的默认值。
问题是上面的第二个 CMake 片段也不会生成任何-std
标志。 我现在该怎么做,这是 CMake 中的错误吗? 如何告诉它我想要一个明确的-std=c++17
标志?
备注 1:我知道我可以在target_compile_options
中粘贴-std=c++17
,但我不想那样做,对吗?
备注 2:完整性检查:如果我将cxx_std_17
更改为cxx_std_20
,则CXX_EXTENSIONS OFF
正确地从-std=gnu++2a
切换到-std=c++2a
。
这个问题的答案是,它是 CMake 3.21 中的一个错误(但技术上不是 3.20,它比所讨论的编译器更旧)将在 3.22 中修复,很可能通过以下合并请求: https://gitlab。 kitware.com/cmake/cmake/-/merge_requests/6177
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.