1. ホーム
  2. c++

[解決済み] CMakeでC++17を有効にする方法

2023-02-15 21:35:23

質問

私は、統合された CMake 3.8 をサポートする VS 15.3 を使用しています。どのように私は、各特定のコンパイラー用のフラグを書かずに C++17 をターゲットにすることができますか?私の現在のグローバル設定は動作しません。

# https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

# expected behaviour
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++lastest")

CMake が VS ソリューション ファイルを生成するときに "/std:c++last" または同等のものを追加することを期待しましたが、c++17 フラグが見つからず、コンパイラ エラーになりました。

C1189 #error: class template optional is only available with C++17.

どのように解決するのですか?

あなたのアプローチは正しいものですが、CMake の 3.10 より前のバージョンでは MSVC では動作しません。

から CMake 3.9 ドキュメント :

MSVC のような標準レベルの概念がないコンパイラの場合、これは何の効果もありません。

要するに、CMake は VC++ 2017 に追加された標準フラグに対応するために更新されていないのです。

VC++ 2017 (またはそれ以降) が使用されているかどうかを検出し、今のところ対応するフラグを自分で追加する必要があります。


CMake 3.10 (およびそれ以降) では、これは VC++ の新しいバージョン用に修正されました。以下を参照してください。 3.10 ドキュメント .