2010-06-07 10 views
70

Hace poco intenté usar Qt Creator 1.3.2, Qt 4.6.2 y GCC 4.4.0 (versión de 32 bits) en Windows 7 (64 bits) para compilar una aplicación que utiliza algunos de los C++ 0x extensiones experimentales y se encontró con la siguiente (mortal) error:Configurar el compilador GCC cambia en Qt, QtCreator y QMake

This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

En mi búsqueda de una solución, me encontré con el hilo qmake and compiler flags?, y añadió lo siguiente a el archivo .pro:

CXXFLAGS += -std=c++0x 

pero eso no pareció hacer la diferencia.

Por lo tanto, espero que haya alguna etiqueta que deba agregar al archivo .pro (proyecto), pero nunca antes me he equivocado con el compilador GCC en Qt, QMake y QtCreator, y no estoy seguro del invokation/encantamiento apropiado. Entonces, mi pregunta es ¿cómo se configuran los interruptores del compilador GCC cuando se usan QtCreator, QMake y Qt?

Respuesta

100

Se reduce a la lectura de manual. En lugar de utilizar CXXFLAGS en el archivo .pro, es necesario utilizar QMAKE_CXXFLAGS como en:

main.cpp:

#include <cinttypes> 

int main() { return 0; } 

main.pro:

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

Este indicador aún no funciona con QtCreator 2.4.1 por algún motivo. – Chan

+0

¿Dónde está usando la bandera? – andand

+1

+1, El 'QMAKE_CXXFLAGS + = ...' se puede especificar como un argumento adicional en la configuración de compilación (es decir, la línea de comandos) también. – MDMoore313

3

que puedes usar

CONFIG += c++11 

para habilitar indicadores del compilador de C++ 11 automáticamente.

Busque los archivos .prf en su instalación de qt. No sé dónde podrían estar en Windows, pero en mi instalación de Linux están bajo /opt/Qt/5.4/gcc_64/mkspecs/features.

Es posible que desee leer el qmake documentation para ello:

qmake can be set up with extra configuration features that are specified in feature (.prf) files. These extra features often provide support for custom tools that are used during the build process. To add a feature to the build process, append the feature name (the stem of the feature filename) to the CONFIG variable.

Puede add your own features.

Esto es lo que encontré en mi sistema. CONFIG + = nombre permitirá a la función:

./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 
1

La única manera de que realmente funciona para mí es agregarlo aQMAKE_CXXFLAGS.

CONFIG += c++11no agrega-std=c++11 al comando de compilación.

+0

tenga en cuenta que esta pregunta se realizó en 2010. 'CONFIG + = C++ 11' es la solución correcta para qtcreator 3.X + (lanzado en 2012). – smerlin

Cuestiones relacionadas