web-dev-qa-db-fra.com

Configuration des commutateurs du compilateur GCC dans Qt, QtCreator et QMake

J'ai récemment essayé d'utiliser Qt Creator 1.3.2, Qt 4.6.2 et GCC 4.4.0 (version 32 bits) sur Windows 7 (64 bits) pour compiler une application en utilisant certains des extensions C++ 0x expérimentales et rencontré l'erreur (fatale) suivante:

Ce fichier nécessite le support du compilateur et de la bibliothèque pour la prochaine norme ISO C++, C++ 0x. Cette prise en charge est actuellement expérimentale et doit être activée avec les options du compilateur -std = c ++ 0x ou -std = gnu ++ 0x.

Dans ma recherche d'une solution, je suis tombé sur le fil drapeaux qmake et compilateur?, et j'ai ajouté ce qui suit au. profil:

CXXFLAGS += -std=c++0x

mais cela ne semblait pas faire de différence.

Donc, je m'attends à ce qu'il y ait une balise que je dois ajouter au fichier .pro (projet), mais je n'ai jamais joué avec les commutateurs du compilateur GCC dans Qt, QMake et QtCreator auparavant, et je ne suis pas sûr de l'invocation/incantation appropriée . Donc, ma question est de savoir comment définir les commutateurs du compilateur GCC lors de l'utilisation de QtCreator, QMake et Qt?

72
andand

Cela revient à lire le manuel . Au lieu d'utiliser CXXFLAGS dans le fichier .pro, vous devez utiliser QMAKE_CXXFLAGS un péché:

main.cpp:

#include <cinttypes>

int main() { return 0; }

main.pro:

SOURCES += main.cpp
QMAKE_CXXFLAGS += -std=c++0x
104
andand

Tu devrais utiliser

CONFIG += c++11

pour activer automatiquement les drapeaux du compilateur C++ 11.

Chercher .prf fichiers dans votre installation qt. Je ne sais pas où ils pourraient être sur Windows, mais sur mon installation Linux, ils sont sous /opt/Qt/5.4/gcc_64/mkspecs/features.

Vous voudrez peut-être lire la documentation qmake pour cela:

qmake peut être installé avec des fonctionnalités de configuration supplémentaires qui sont spécifiées dans les fichiers de fonctionnalités (.prf). Ces fonctionnalités supplémentaires prennent souvent en charge les outils personnalisés utilisés pendant le processus de génération. Pour ajouter une fonctionnalité au processus de génération, ajoutez le nom de la fonctionnalité (la racine du nom de fichier de la fonctionnalité) à la variable CONFIG.

Vous pouvez ajouter vos propres fonctionnalités .

Voici ce que j'ai trouvé sur mon système. CONFIG + = nom activera la fonction:

./Android/android_deployment_settings.prf
./Android/android.prf
./build_pass.prf
./c++11.prf
./c++14.prf
./cmake_functions.prf
./configure.prf
./create_cmake.prf
./ctest_testcase_common.prf
./ctest_testcase_installed.prf
./ctest_testcase.prf
./dbusadaptors.prf
./dbusinterfaces.prf
./declarative_debug.prf
./default_post.prf
./default_pre.prf
./designer_defines.prf
./device_config.prf
./egl.prf
./exceptions_off.prf
./exceptions.prf
./exclusive_builds_post.prf
./exclusive_builds.prf
./gcov.prf
./include_source_dir.prf
./incredibuild_xge.prf
./Java.prf
./Lex.prf
./link_ltcg.prf
./link_pkgconfig.prf
./ltcg.prf
./mac/default_post.prf
./mac/default_pre.prf
./mac/objective_c.prf
./mac/rez.prf
./mac/sdk.prf
./moc.prf
./no_debug_info.prf
./precompile_header.prf
./qfeatures.prf
./qlalr.prf
./qml1_module.prf
./qml1_plugin.prf
./qml_debug.prf
./qml_module.prf
./qml_plugin.prf
./qmltestcase.prf
./qpa/basicunixfontdatabase.prf
./qpa/genericunixfontdatabase.prf
./qt_Android_deps.prf
./qt_app.prf
./qt_build_config.prf
./qt_build_paths.prf
./qt_common.prf
./qt_config.prf
./qt_docs.prf
./qt_docs_targets.prf
./qt_example_installs.prf
./qt_functions.prf
./qt_headersclean.prf
./qt_helper_lib.prf
./qt_installs.prf
./qt_module_headers.prf
./qt_module.prf
./qt_module_pris.prf
./qt_parts.prf
./qt_plugin.prf
./qt.prf
./qt_targets.prf
./qt_tool.prf
./resolve_config.prf
./resolve_target.prf
./resources.prf
./silent.prf
./simd.prf
./spec_post.prf
./spec_pre.prf
./testcase.prf
./testcase_targets.prf
./testcocoon.prf
./testlib_defines.prf
./uic.prf
./unix/bsymbolic_functions.prf
./unix/dylib.prf
./unix/hide_symbols.prf
./unix/largefile.prf
./unix/opengl.prf
./unix/openvg.prf
./unix/separate_debug_info.prf
./unix/thread.prf
./unix/x11inc.prf
./unix/x11lib.prf
./unix/x11.prf
./unix/x11sm.prf
./use_c_linker.prf
./vxworks.prf
./warn_off.prf
./warn_on.prf
./wayland-scanner.prf
./win32/console.prf
./win32/default_pre.prf
./win32/dumpcpp.prf
./win32/idcidl.prf
./win32/msvc_mp.prf
./win32/opengl.prf
./win32/openvg.prf
./win32/qt_config.prf
./win32/qt_dll.prf
./win32/rtti_off.prf
./win32/rtti.prf
./win32/stl_off.prf
./win32/stl.prf
./win32/windeployqt.prf
./win32/windows.prf
./winrt/console.prf
./winrt/font_deployment.prf
./winrt/package_manifest.prf
./yacc.prf
5
doug65536

La seule façon qui fonctionne vraiment pour moi est de l'ajouter à QMAKE_CXXFLAGS.

Le CONFIG += c++11n'ajoute pas-std=c++11 à la commande de compilation.

3
Doug Royer