簡體   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