crossplatform.ru

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


  Ответ в Qt+CodeBlocks
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Fedcomp Дата 24.10.2010, 17:06
  В консоли скомпилился ...

можно ли какой либо простой пример, чтобы проверить отрабатывается ли qmake при компиле?
alex977 Дата 24.10.2010, 14:33
  Простейший пример.

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, 14:00
  Можно пример самого простого приложения на Qt? и хотелось бы узнать как компилировать вручную этот проект.
Litkevich Yuriy Дата 24.10.2010, 13:39
  Прочитай тут, проверь pro-файл
Fedcomp Дата 24.10.2010, 13:16
  Дело сдвинулось, нашел ваш пост по этому поводу 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, 12:03
 
Цитата(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, 11:38
  Т.е достаточно сделать 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 Дата 23.10.2010, 22:05
 
Цитата(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-файл
Kagami Дата 23.10.2010, 21:07
  Когда я пару лет назад работал в Code::Blocks, то для работы с Qt я использовал плагин QtWorkbench. Впрочем он был не совсем удобен, и насколько я могу судить он не очень активно развивается. После выхода первой версии Qt Сreator я перешел на него и не жалею. Рекомендую на него посмотреть ;)
Fedcomp Дата 23.10.2010, 20:51
  Всем привет.
Хочу чтобы CodeBlocks на автомате (по клавише F9 т.е компиляция) проходился по полному циклу qmake и потом компиляция через mingw.
Но возникло много трудностей. Во первых я новичок, процессы компиляции понимаю крайне плохо (лишь знаю что в .o файлах компилируется код, затем линкером объединяется в экзешник, ну ещё что то слышал про makefile, но не знаю как они работают, и знаю что Qt использует moc для того чтобы добавить к C++ упрощенный вид функций (т.е препроцессор moc делает б0льшую работу за программиста, собственно превращая псевдо slots и signals в настоящий код понятный компилятору))
Во вторых не понятен способ ручной компиляции Qt проектов. В Qt designer сборка проходит абсолютно прозрачно, как и что он в это время делает не понятно.
Пробовал порыться в гугле, нашел qmake -project (рекурсивно проходится по текущему каталогу и составляет qt проект) и qmake "имя_проекта.pro" который проходится moc'ом как я понял.
Так вот такая задача, хочу чтобы CodeBlocks автоматически запускал qmake перед компиляцией, это возможно?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 15:57