ドキュメントによれば、CXX_STANDARD_REQUIRED
からON
に設定すると、ビルドシステムで古いC++標準を使用してから、CXX_STANDARD
で要求したものが使用できなくなります。最小限必要なC++標準を指定する
しかし、WriteCompilerDetectionHeaderモジュールと組み合わせると、 "面白い"問題が発生します。例えばcxx_relaxed_constexpr
ため
set(CMAKE_CXX_STANDARD 11)
とテスト、その後、条件付きCXX_STANDARD
の要件とマクロの使用がそうであるようにGCC 6.3.0でコンパイルエラーにconstexpr
リードに展開されるマクロを定義:「上位互換性」のいくつかのフォームを提供するとき競合する(実際のフィーチャセットを使用するフィーチャヘッダー、C++ 11が必要なときにコンパイラによって提供されるものではない)。
最近の標準(C++ 11以降など)を禁止することなく、必要最小限のC++標準を指定する方法はありますか?私が現在考えることのできる唯一の回避策は、CXX_STANDARD
とCXX_STANDARD_REQUIRED
を一切設定せず、単に「非公式に」最小限のバージョンのC++を必要とすることです。
簡単に行うことができない理由を、私は一般的に、それはありませんので、私は単にそれが簡単に行われていないオプションを追加し、...、ユーザが使用すべき標準を決める – MFH
を持っていますね、私は理解していないけれども標準のコンパイラオプションの仕組みこれは最小値でも最大値でもありません。それは絶対値です。たとえば、 '-std = C++ 11'を' g ++ 'に与えると、コンパイラにC++ 11コードだけを期待するように指示します。 C++ 14またはC++ 17のいずれの構文もエラーになります。 C++ 11で削除された以前のバージョンの標準のものはエラーになります。セマンティクスはコンパイラによって多少異なる場合がありますので、コンパイラオプションのドキュメントをよくお読みください。 – nega
これは当てはまりますが、これはコンパイラ自体ではなくビルドシステムによって解決できるはずです。 (すべてのCMakeがコンパイラがどの言語バージョンをサポートしているかを "魔法のように"知っている)...注意:CMakeは、CXX_STANDARD_REQUIREDがOFF(デフォルトでさえも)の場合、古い標準へのフォールバックをサポートしています... – MFH