繁体   English   中英

GCC 11:如何告诉 CMake 我不想要默认的 C++ GNU 扩展?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM