gpt4 book ai didi

c++ - 海湾合作委员会 11 : How to tell CMake I don't want the default C++ GNU extensions?

转载 作者:行者123 更新时间:2023-12-04 14:07:07 25 4
gpt4 key购买 nike

所以,回到 GCC 10.2(默认使用 C++14),我可以用它来告诉 CMake 我想要 -std=gnu++17 :

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 版本,因此上面的第一个片段不会生成任何 -std GCC 的标志,它与 GCC 11 的手册页兼容:

c++17: The 2017 ISO C++ standard plus amendments.

gnu++17: GNU dialect of -std=c++17. This is the default for C++ code.


问题是 上面的第二个 CMake 片段也不会生成任何 -std .我现在该怎么做,这是 CMake 中的错误吗?我如何告诉它我想要一个明确的 -std=c++17旗帜?
备注1:我知道我可以坚持 -std=c++17target_compile_options ,但我不想那样做,是吗?
备注 2:健全性检查:如果我改变 cxx_std_17cxx_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

关于c++ - 海湾合作委员会 11 : How to tell CMake I don't want the default C++ GNU extensions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67641124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com