Я пытаюсь комбинировать Code :: Blocks IDE и Qt 5.1.1 на моем win7 32bit. В CB я использую компилятор MinGW g++, который поддерживает С++ 0x.
Я загрузил "qt-windows-opensource-5.1.1-mingw48_opengl-x86-offline.exe" и установлен в "D:\Qt-library\5.1.1\mingw48_32 \".
Затем в CB я добавил три инструмента с именем "qmake -project", "qmake" и "make" в Tools-> Configure Tools-> add.
"qmake -project" с исполняемым файлом "D:\Qt-library\5.1.1\mingw48_32\bin\qmake.exe", Параметры: "-project -платформа win32- g++"
"qmake" с Excutable, как "qmake -project", без параметра;
"make" с Excutable "D:\Qt-library\Tools\mingw48_32\bin\mingw32-make.exe", без параметра
Рабочий каталог все установлен на "$ {PROJECT_DIR}"
И я нажал project-> свойства, выбранные "Это пользовательский Makefile",
Затем я щелкнул пункт меню "qmake -project" в меню "Сервис", которое я создал, как указано выше, qmake сгенерировал файл.pro.
Потому что я использую
#include <QApplication>
вместо
#include <QtGui/QApplication>
в файле main.cpp, поэтому я добавил "QT + = widgets" в.pro файл.
Затем нажмите "qmake" в меню "Сервис", создайте make файлы. Если я сделаю прямо, он не будет компилироваться, потому что он не поддерживает некоторые С++ 11 грамматик,
поэтому я отредактировал Makefile.Debug и makefile.Release, это выглядит так:
CC = gcc
CXX = g++
DEFINES = -DUNICODE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
CFLAGS = -pipe -fno-keep-inline-dllexport -O2 -Wall -Wextra $(DEFINES)
CXXFLAGS = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
Я добавил -std = С++ 0x в строке CXXFLAGS, поэтому он становится
CXXFLAGS = -pipe -std=c++0x -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
(он не будет работать для моей версии MinGW, если я использую -std = С++ 11)
Затем нажмите "make" в меню "Сервис", я получу две ошибки:
Я не знаю, что, черт возьми, это, но некоторые, как я изменил свою основную функцию от int main(int argc, char** argv)
до int qMain(int argc, char** argv)
. Затем сделайте еще раз, две ошибки qMain исчезли, но я получил следующее:
И теперь я ничего не делал, делаю еще раз, эта ошибка исчезла !!! Но сгенерированный файл.exe ничего не сделает, либо дважды щелкните или запустите в командной строке, ничего не произойдет (кстати, хотя я и включил, я не писал Qt-код). Если я удалю
#include <QApplication>
и создать проект обычным способом (отмените "Это настраиваемый Makefile" и создайте напрямую), моя программа идет хорошо.
Еще одна вещь очень странная, я добавил CONFIG += debug
и CONFIG -= release
в.pro файле, qmake будет генерировать как Makefile.Debug, так и Makefile.Release (независимо от того, какой CONFIG или отладка и релиз являются более строгими или строчными), но сгенерированы. o файлы и.exe файлы находятся в папке выпуска, без файла отладки, почему?
У кого-нибудь есть идеи? Я буду очень благодарен за ваши предложения.
Проблема решена (хотя и не совсем).
Дело в том, что программа что-то сделала, но каким-то образом не появляется консольное окно (до того, как я добавляю заголовок Qt, я написал программу в C++ и использовал cout для печати сообщений), поэтому выход не может быть просмотрен, даже если я запускаю программа в консоли. Я нашел это, написав простую программу Qt GUI для печати результатов, она работает. Но я не знаю, почему консоль не появлялась с включенным QApplication, но в программе не было Qt-кода (независимо от того, что я установил project-> properties-> build targets-> select build target options-> type to GUI или консоль).
С другой стороны, я могу запустить программу Qt GUI, дважды щелкнув файл.exe в каталоге отладки, но не в Code :: Blocks, он появляется "не удается найти запись в программе InterlockedCompareExchange @12 в библиотеке динамических ссылок libstd [CN10 ] -6.dll". Таким образом, я не могу отлаживать программу через CB.