Налаштування комутаторів компілятора GCC у Qt, QtCreator та QMake


74

Нещодавно я спробував використовувати Qt Creator 1.3.2, Qt 4.6.2 та GCC 4.4.0 (32-розрядна версія) в Windows 7 (64-розрядна версія) для компіляції програми з використанням деяких експериментальних розширень C ++ 0x та виникла така (фатальна) помилка:

Цей файл вимагає підтримки компілятора та бібліотеки для майбутнього стандарту ISO C ++, C ++ 0x. Наразі ця підтримка є експериментальною, і її слід увімкнути за допомогою параметрів компілятора -std = c ++ 0x або -std = gnu ++ 0x.

У пошуках рішення я натрапив на прапорці qmake та компілятор? , і додав у файл .pro наступне:

CXXFLAGS += -std=c++0x

але, здавалося, це не мало значення.

Отже, я сподіваюся, є якийсь тег, який мені потрібно додати до файлу .pro (проект), але я ніколи раніше не плутався з перемикачами компілятора GCC у Qt, QMake та QtCreator, і я не впевнений у правильному виклику / заклинанні . Отже, моє питання полягає в тому, як ви встановлюєте комутатори компілятора GCC під час використання QtCreator, QMake та Qt?

Відповіді:


103

Це зводиться до читання посібника . Замість того, щоб використовувати CXXFLAGSу файлі .pro, вам потрібно використовувати, QMAKE_CXXFLAGSяк у:

main.cpp:

#include <cinttypes>

int main() { return 0; }

main.pro:

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

5
Цей прапор досі не працює з QtCreator 2.4.1 з деяких причин.
Чан

Де ви використовуєте прапор?
andand

1
+1, The також QMAKE_CXXFLAGS+=...можна вказати як додатковий аргумент у конфігурації збірки (тобто, командного рядка).
MDMoore313

1
Що робити, якщо ви робите проект, який не стосується Qt, у Qt Creator? (У ньому не було б файлу .pro. Що б ви тоді робили?
Геремія

1
@Geremia Зверху в моїй голові, я не знаю ... Можливо, ви захочете задати інше питання.
andand

5

Ви повинні використовувати

CONFIG += c++11

щоб увімкнути прапори компілятора C ++ 11 автоматично.

Шукайте .prfфайли в інсталяції qt. Я не знаю, де вони можуть знаходитись у вікнах, але під моєю інсталяцією Linux вони знаходяться /opt/Qt/5.4/gcc_64/mkspecs/features.

Можливо, ви захочете прочитати документацію qmake для цього:

qmake можна налаштувати за допомогою додаткових функцій конфігурації, які вказані у файлах функцій (.prf). Ці додаткові функції часто забезпечують підтримку спеціальних інструментів, які використовуються в процесі побудови. Щоб додати об’єкт до процесу збірки, додайте ім’я об’єкта (основу імені файлу об’єкта) до змінної CONFIG.

Ви можете додати власні функції .

Ось те, що я знайшов у своїй системі. CONFIG + = name увімкне функцію:

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

3

Єдиний спосіб, який справді працює для мене, - це додати QMAKE_CXXFLAGS .

CONFIG += c++11 Не додає -std=c++11 до команди компіляції.


2
майте на увазі, що це питання було задано в 2010 році. CONFIG += c++11це правильне рішення для qtcreator 3.X + (випущено ще в 2012 році).
смерлін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.