現在、QtアプリケーションでC++ 11機能を使用しています。ただし、アプリケーションでいくつかの新しいC++ 14機能を使用したいと思います。
QtアプリケーションでC++ 11を有効にするには、qmakeプロジェクトファイルに1行追加するだけです。つまり:
CONFIG += c++11
またはこれは以前のバージョンの場合:
QMAKE_CXXFLAGS += -std=c++1y
私はすでにC++ 14でも同じことをしようとしましたが、うまくいきませんでした。 qmakeプロジェクトの上記の行を次のように変更しました。
CONFIG += c++14
またはこれは以前のバージョンの場合:
QMAKE_CXXFLAGS += -std=c++1y
その後、プロジェクトをビルドしようとすると、以前には存在しなかった多くのコンパイルエラーが表示されます。プロジェクトは正常にコンパイルされますが、C++ 14の機能を使用しようとすると、コンパイルエラーが発生します。これは一例です:
template<typename T>
constexpr T pi = T(3.1415926535897932385);
これは対応するエラーです:
main.cpp:7: error: template declaration of 'constexpr const T pi'
constexpr T pi = T(3.1415926535897932385);
^
QtCreatorでqmakeプロジェクトを使用するときにC++ 14機能を有効にする方法
Qt 5.3.2、Qt Creator 3.2.1、およびMinGW 4.8.2 32ビットを使用しています。
Qt Creatorは単なる [〜#〜] ide [〜#〜] です。
IDEは「smartertext editors」と考えることができ、開発者がデバッグ、ビルド、コード補完、ファイル管理などを支援します。
IDEはコンパイル中は無関係です。
重要なのはコンパイラです。そして、IDEからは独立しています。
g ++ 4.8.xは、多くのC++ 14機能をサポートしていません: C++ 14機能がサポートされているものについては、このページをご覧ください 。
これはQt 5.4から適切にサポートされるようになりました 。これをqmakeプロジェクトファイルに入力するだけです。
CONFIG += c++14
必要なコードの変更は、Thiagoによって2014年半ばに行われました。
必要なドキュメントの変更を作成しました。
qmake変数リファレンスのc ++ 14 CONFIGオプションに言及
変数テンプレートはgcc 5.0からのみサポートされますが、コードは問題なく機能することに注意してください。これは、古いgccでC++ 14をテストするために使用できます。
#include <iostream>
int main()
{
// Binary literals: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3472.pdf
// Single-quotation-mark as a digit separator: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3781.pdf
std::cout << 0b0001'0000'0001;
return 0;
}
TEMPLATE = app
TARGET = main
CONFIG -= qt
CONFIG += c++14
SOURCES += main.cpp
qmake && make && ./main
257
奇妙な理由により、これはQtが行うことです。コンパイラがgccまたはmingwの場合、CONFIG+=C++14
はコンパイラフラグ-std=c++14
に変換されます(予想どおり)
別のコンパイラ(clangなど)の場合、CONFIG=C++14
は-std=c++11
(sic!)に愚かに変換されるため、clangバージョンがC++ 14を正しくサポートしていても、サポートされていない機能に関するエラーが発生します。
修正するには、フラグを明示的に指定します。
QMAKE_CXXFLAGS += -std=c++14
これにより、コンパイラー(g ++、mingw、またはclang)が正しいフラグを確実に受け取るようになります。
Qt 5.4より前のバージョンでqmakeでC++ 14を使用するには(Qt Creatorまたは他のIDEまたはコマンドラインから)およびgcc、これを。proファイル:
QMAKE_CXXFLAGS += -std=c++1y
qmakeはQt 5.4でCONFIG += c++14
をサポートするため、少なくともそのバージョンのQtを必要とすることに慣れているプロジェクトに使用できます。スイッチの競合を避けるために、明示的なコンパイラフラグを使用するか、CONFIG
オプションを使用してください。同時に両方を使用しないでください。
残念ながらgcc4.8.2はごく少数のC++ 14機能をサポートしています( here を参照)が、このコードスニペットでテストできます:
#include <iostream>
auto f() { return 42; }
int main()
{
std::cout << f() << std::endl;
}
QMAKE_CXXFLAGS += -std=c++1y
で問題なくコンパイルできますが、CONFIG += c++11
またはQMAKE_CXXFLAGS += -std=c++1x
で警告が表示されます。