Search code examples
c++qtmakefileqt5qmake

Creating project file through terminal and compile failes but through Qt Creator IDE works fine


I’m newbie, so please have patience with me. I’m using Ubuntu and I have installed Qt 5.1.0 from .run file. QtCreator 2.8 got installed also. I added these lines to my .bashrc file:

export QTDIR=/opt/Qt5.1.0/5.1.0/gcc
export QMAKESPEC=$QTDIR/mkspecs/linux-g++
export QT_PLUGIN_PATH=$QTDIR/plugins

export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

I tried to comile simple example application:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
 QApplication app(argc,argv);
 QLabel *label = new QLabel("Hello Qt!");
 label->show();
 return app.exec();
}

I did “qmake -project”, and “qmake hello.pro”, and then I typed “make”. And that gives me error: “hello.cpp:1:24: fatal error: QApplication: No such file or directory compilation terminated.”

The problem seems to be in qmake. When I make project with QtCreator it’s Makefile has different INCPATH variable, and this phase goes without problem (there are other problems but it’s another question). This is INCPATH variable in Makefile created through QtCreator:

“INCPATH = -I/opt/Qt5.1.0/5.1.0/gcc/mkspecs/linux-g++ -I../helloQtCreator -I/opt/Qt5.1.0/5.1.0/gcc/include -I/opt/Qt5.1.0/5.1.0/gcc/include/QtWidgets -I/opt/Qt5.1.0/5.1.0/gcc/include/QtGui -I/opt/Qt5.1.0/5.1.0/gcc/include/QtCore -I. -I. -I.”

And this one is created by qmake through terminal:

“INCPATH = -I/opt/Qt5.1.0/5.1.0/gcc/mkspecs/linux-g++ -I. -I. -I/opt/Qt5.1.0/5.1.0/gcc/include -I/opt/Qt5.1.0/5.1.0/gcc/include/QtGui -I/opt/Qt5.1.0/5.1.0/gcc/include/QtCore -I.”

Project names are different but why qmake doesn’t include “-I/opt/Qt5.1.0/5.1.0/gcc/include/QtWidgets” when started manualy from terminal? Adding this line to .pro file solves the problem temporary:

QT += widgets

But I don't want to do this manually every time. And how can I fix it?

Thank you.


Solution

  • This is the bug in Qt, When creating project file from the Terminal using command qmake -project, the generated project file does not contain line: greaterThan(QT_MAJOR_VERSION, 4): QT += widgets. That may be the reason why qmake doesn’t include “-I/opt/Qt5.1.0/5.1.0/gcc/include/QtWidgets” in your MAKEFILE. More info QT BUG.