crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt+CodeBlocks
Fedcomp
  опции профиля:
сообщение 23.10.2010, 20:51
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 23.10.2010
Пользователь №: 2146

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет.
Хочу чтобы CodeBlocks на автомате (по клавише F9 т.е компиляция) проходился по полному циклу qmake и потом компиляция через mingw.
Но возникло много трудностей. Во первых я новичок, процессы компиляции понимаю крайне плохо (лишь знаю что в .o файлах компилируется код, затем линкером объединяется в экзешник, ну ещё что то слышал про makefile, но не знаю как они работают, и знаю что Qt использует moc для того чтобы добавить к C++ упрощенный вид функций (т.е препроцессор moc делает б0льшую работу за программиста, собственно превращая псевдо slots и signals в настоящий код понятный компилятору))
Во вторых не понятен способ ручной компиляции Qt проектов. В Qt designer сборка проходит абсолютно прозрачно, как и что он в это время делает не понятно.
Пробовал порыться в гугле, нашел qmake -project (рекурсивно проходится по текущему каталогу и составляет qt проект) и qmake "имя_проекта.pro" который проходится moc'ом как я понял.
Так вот такая задача, хочу чтобы CodeBlocks автоматически запускал qmake перед компиляцией, это возможно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 23.10.2010, 21:07
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Когда я пару лет назад работал в Code::Blocks, то для работы с Qt я использовал плагин QtWorkbench. Впрочем он был не совсем удобен, и насколько я могу судить он не очень активно развивается. После выхода первой версии Qt Сreator я перешел на него и не жалею. Рекомендую на него посмотреть ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.10.2010, 22:05
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Fedcomp @ 23.10.2010, 23:51) *
В Qt designer сборка проходит абсолютно прозрачно, как и что он в это время делает не понятно.
В дизайнере сборка вообще не происходит. Это всего лишь инструмент для визуального создания виджетов/окон

Цитата(Fedcomp @ 23.10.2010, 23:51) *
Во вторых не понятен способ ручной компиляции Qt проектов.

1) qmake myproject.pro
2) make
...
N) make

1 - программа qmake создаёт make-файлы на основе pro-файла
2 - программа make читает make-файлы и исполняет инструкции записанные в них, в отличие от bat/shell-файлов логика обработки make-файлов специфичная, т.к. позволяет отслеживать зависимости команд (например, нужно ли перекомпилировать такой-то файл или он не изменялся со времени последней компиляции)
N - тоже что и №2, так как в make-файле есть цель в виде pro-файла. Т.е. если pro-файл изменился, программа make это заметит и вызовит qmake автоматически.

П.С.
1) иногда всё таки приходится повторно вызывать qmake явно (руками), это когда, например, класс наследник QObject сначала не содержал макрос Q_OBJECT, а потом этот макрос появился.
2) moc вручную не вызывают, программа qmake записывает соответствующий вызов в make-файл
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fedcomp
  опции профиля:
сообщение 24.10.2010, 11:38
Сообщение #4


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 23.10.2010
Пользователь №: 2146

Спасибо сказали: 0 раз(а)




Репутация:   0  


Т.е достаточно сделать Makefile с помощью QT и заставить кодеблоки юзать этот мейкфайл?
и при этом qmake при необходимости будет запускаться сам, я правильно все понял?

Делаю так,
cmd.exe=>
D:\non_users\projecT\GSC\develope\server_configurator>qmake -project

D:\non_users\projecT\GSC\develope\server_configurator>qmake "server_configurator
.pro"
WARNING: d:\non_users\projecT\GSC\develope\server_configurator\server_configurat
or.pro:7: Unescaped backslashes are deprecated.
WARNING: d:\non_users\projecT\GSC\develope\server_configurator\server_configurat
or.pro:7: Unescaped backslashes are deprecated.
WARNING: d:\non_users\projecT\GSC\develope\server_configurator\server_configurat
or.pro:7: Unescaped backslashes are deprecated.

D:\non_users\projecT\GSC\develope\server_configurator>

Появляются мейк файлы (Makefile, Makefile.release, Makefile.debug)

Дальше захожу в CodeBlocks, запускаю проект и в свойствах проекта нажимаю "This is custom makefile" нажимаю ок.
Жму F9 (т.е компиляцию и запуск)
Получаю
It seems that this project has no been built yet.
Do you want to build it now?

(что нормально, т.е кодеблок хочет его компильнуть)
Нажимаю yes и получаю
-------------- Build: Debug in srvconfig ---------------

Using makefile: Makefile
MAKE Version 5.2  Copyright (c) 1987, 1998 Inprise Corp.
Fatal: 'FORCE' does not exist - don't know how to make it
Process terminated with status 1 (0 minutes, 0 seconds)
0 errors, 0 warnings

Смотрю в makefile и вижу
debug: $(MAKEFILE).Debug FORCE
    $(MAKE) -f $(MAKEFILE).Debug
debug-make_default: $(MAKEFILE).Debug FORCE
    $(MAKE) -f $(MAKEFILE).Debug
debug-make_first: $(MAKEFILE).Debug FORCE
    $(MAKE) -f $(MAKEFILE).Debug first
debug-all: $(MAKEFILE).Debug FORCE
    $(MAKE) -f $(MAKEFILE).Debug all

И много подобных строк. Как я понял компилятор не знает что делать с FORCE
Что я сделал не так?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.10.2010, 12:03
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Fedcomp @ 24.10.2010, 14:38) *
Т.е достаточно сделать Makefile с помощью QT и заставить кодеблоки юзать этот мейкфайл?
и при этом qmake при необходимости будет запускаться сам, я правильно все понял?
да.

Цитата(Fedcomp @ 24.10.2010, 14:38) *
Как я понял компилятор не знает что делать с FORCE
не компилятор а программа make

Я не знаю, что делает CodeBlocks, нужно просто скомандовать
make - будет собирать и релиз и отладку, но может перетереть предыдущий вариант (например релизный), т.к. зависит от настроек проекта
или
make debug - для сборки отладочной версии приложения
или
make release - для сборки релизной версии приложения
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fedcomp
  опции профиля:
сообщение 24.10.2010, 13:16
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 23.10.2010
Пользователь №: 2146

Спасибо сказали: 0 раз(а)




Репутация:   0  


Дело сдвинулось, нашел ваш пост по этому поводу http://www.forum.crossplatform.ru/index.ph...post&p=8828
Действительно у меня стоял борландовский C++, убрал его из переменных сред подключился mingw (на самом деле не подключился, я скопировал mingw32-make.exe в файл с названием make.exe, теперь из командной строки запускается как и положено mingw)
Поидее теперь qmake должен работать нормально. Значит проблема не в этом.
Дело в том что я пытаюсь пробный проект скомпилить, сделал форму в Qt creator'е, и пытаюсь её подсоединить к проекту.
Есть
main.cpp
#include <QApplication>
#include <QDialog>

using namespace std;

#include "forms/mainform/mainfrm.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    Ui::mainfrm ui;
    QDialog *dialog = new QDialog;
    ui.setupUi(dialog);

    dialog->show();

    return app.exec();
}

Есть
forms/mainform/mainfrm.h
#ifndef MAINFRM_H
#define MAINFRM_H

#include <QMainWindow>

namespace Ui {
    class mainfrm;
}

class mainfrm : public QMainWindow
{
    Q_OBJECT

public:
    explicit mainfrm(QWidget *parent = 0);
    ~mainfrm();

private:
    Ui::mainfrm *ui;
};

#endif // MAINFRM_H

Есть
forms/mainform/mainfrm.cpp
#include "mainfrm.h"
#include "ui_mainfrm.h"

mainfrm::mainfrm(QWidget *parent) : QMainWindow(parent),ui(new Ui::mainfrm)
{
    ui->setupUi(this);
}

mainfrm::~mainfrm()
{
    delete ui;
}


При компиляции получаю ошибку
main.cpp|12|error: aggregate 'Ui::mainfrm ui' has incomplete type and cannot be defined|

Кстати говоря #include "ui_mainfrm.h" не создается почему то ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 24.10.2010, 13:39
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Прочитай тут, проверь pro-файл
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fedcomp
  опции профиля:
сообщение 24.10.2010, 14:00
Сообщение #8


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 23.10.2010
Пользователь №: 2146

Спасибо сказали: 0 раз(а)




Репутация:   0  


Можно пример самого простого приложения на Qt? и хотелось бы узнать как компилировать вручную этот проект.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
alex977
  опции профиля:
сообщение 24.10.2010, 14:33
Сообщение #9


Активный участник
***

Группа: Участник
Сообщений: 310
Регистрация: 19.6.2008
Из: Россия, МО, г.Мытищи
Пользователь №: 206

Спасибо сказали: 77 раз(а)




Репутация:   8  


Простейший пример.

hello.cpp:

#include <QtGui>
int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    QLabel lbl("Hello, World !");
    lbl.show();
    return app.exec();
}


hello.pro:

TEMPLATE = app
SOURCES     = hello.cpp
win32:TARGET     = ../Hello


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Fedcomp
  опции профиля:
сообщение 24.10.2010, 17:06
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 23.10.2010
Пользователь №: 2146

Спасибо сказали: 0 раз(а)




Репутация:   0  


В консоли скомпилился ...

можно ли какой либо простой пример, чтобы проверить отрабатывается ли qmake при компиле?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.9.2019, 17:13