[解決済み] 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 ドキュメント .
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] Linux上で動作するC++コードのプロファイリングを行うにはどうすればよいですか?
-
[解決済み] CMakeにおけるデバッグとリリースの比較
-
[解決済み] CMakeの出力をクリアするための'cmake clean'コマンドを探しています。
-
[解決済み] configure --prefix=DIR && make all install ' と同等のCMakeは何ですか?
-
[解決済み】CMakeでプリプロセッサー・マクロを定義する?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】'cout'は型名ではない
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 配列のベクトルを扱う正しい方法