Basic question: Including headers with INCLUDEPATH doesn't work
-
I already tried that.
Building, running
Building, qmake, running
qmake, running
qmake, building, runningNone of the above ways succeded
-
tried that, two.
Deleted everything but my project file and the sources/headers. Didn't work :-(
Is it possible that qmake ignores INCLUDEPATH?
-
Well, I'll post the whole project file, its headers and sources and maybe you can copy/paste it and try to run it with?
If it works, then it is a setting problem. If not, something with my include logic doesn't work.
project file:
#------------------------------------------------- # # Project created by QtCreator 2016-11-17T15:45:17 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = CourseCalculator TEMPLATE = app INCLUDEPATH += C:/Qt/lib/headers HEADERS += main.h SOURCES += main.cpp C:/Qt/lib/sources/myQString.cpp \ C:/Qt/lib/sources/myQLineEdit.cpp \ C:/Qt/lib/sources/myQPushButton.cpp
main.cpp:
// main.cpp #include "main.h" int main(int argc, char *argv[]) { QApplication applicationApp(argc, argv); clsWindowMain windowMain; QTimer::singleShot(0, &windowMain, SLOT(slotStart())); int ret = applicationApp.exec(); return ret; } main.h:
// main.h
#ifndef MAIN_H #define MAIN_H #include <QApplication> #include <QTimer> #include <QWidget> #include <QDialog> #endif // MAIN_H
myQLineEdit.h:
// myQLineEdit.h #ifndef MYQLINEEDIT_H #define MYQLINEEDIT_H #include <QDebug> #include <QLineEdit> #include <QMessageBox> #include <QDir> // forward declaration class myQLineEdit; // declaration class myQLineEdit : public QLineEdit { Q_OBJECT // .. properties public: myQLineEdit(QWidget* widgetParent = 0); ~myQLineEdit(); // .. more methods }; #endif
myQLineEdit.cpp:
// myQLineEdit.cpp #include <myQLineEdit.h> // absolute path or absolute path with whitespaces also doesn't work // ----- constructors ----- myQLineEdit::myQLineEdit(QWidget* widgetParent) : QLineEdit(widgetParent) { // stuff }
Is that compilable for you?
-
Well, I'll post the whole project file, its headers and sources and maybe you can copy/paste it and try to run it with?
If it works, then it is a setting problem. If not, something with my include logic doesn't work.
project file:
#------------------------------------------------- # # Project created by QtCreator 2016-11-17T15:45:17 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = CourseCalculator TEMPLATE = app INCLUDEPATH += C:/Qt/lib/headers HEADERS += main.h SOURCES += main.cpp C:/Qt/lib/sources/myQString.cpp \ C:/Qt/lib/sources/myQLineEdit.cpp \ C:/Qt/lib/sources/myQPushButton.cpp
main.cpp:
// main.cpp #include "main.h" int main(int argc, char *argv[]) { QApplication applicationApp(argc, argv); clsWindowMain windowMain; QTimer::singleShot(0, &windowMain, SLOT(slotStart())); int ret = applicationApp.exec(); return ret; } main.h:
// main.h
#ifndef MAIN_H #define MAIN_H #include <QApplication> #include <QTimer> #include <QWidget> #include <QDialog> #endif // MAIN_H
myQLineEdit.h:
// myQLineEdit.h #ifndef MYQLINEEDIT_H #define MYQLINEEDIT_H #include <QDebug> #include <QLineEdit> #include <QMessageBox> #include <QDir> // forward declaration class myQLineEdit; // declaration class myQLineEdit : public QLineEdit { Q_OBJECT // .. properties public: myQLineEdit(QWidget* widgetParent = 0); ~myQLineEdit(); // .. more methods }; #endif
myQLineEdit.cpp:
// myQLineEdit.cpp #include <myQLineEdit.h> // absolute path or absolute path with whitespaces also doesn't work // ----- constructors ----- myQLineEdit::myQLineEdit(QWidget* widgetParent) : QLineEdit(widgetParent) { // stuff }
Is that compilable for you?
-
Good idea. But my dropbox accout has no free memory left :-D
Have to create a new account first, maybe on g drive...
-
Good idea. But my dropbox accout has no free memory left :-D
Have to create a new account first, maybe on g drive...
-
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
@jsulm , why would you include the MOC files? I "never" include the MOC files in my source because they get generated, compiled, and linked after the normal build. The only generated file I would include is the ui_NameOfForm.h file created when using the form designer. And, only in the CPP for the UI class.
@Binary91 , I am sure it was explained that INCLUDEPATH tells qmake where to find common include files. I use it for 3rd party libraries or pre-built packages I developed for Qt (I treat them like 3rd party libraries). And, as I know you know... always run qmake after changing a PRO file.
There is one curious item I have found about QtCreator though... if you are using static libraries (even if your dependencies are setup) and make a change to a CPP file in the library... Press build-all and it will build the library and NOT re-link the application or shared library that depends on that static library. Kind of annoying but I just get around it!
-
I know what moc files are, but they were not permanently created by QtCreator (not in my build folder).
But can you tell me why I should have to generate them and manually include them when it works to simply add the headers to the project?
I mean, I wanted to reduce work by using INCLUDEPATH and NOT adding all the included headers.
Generating moc files and manually adding them is not reducing but increasing work.Also I do not understand why I should include them when I don't need it if I add the headers directly...
-
but from where do I get this moc file?
If I try to include, compiler gives me an error that it can not find such file or directorybtw:
https://www.dropbox.com/s/whqdkcat767224t/test.zip?dl=0 -
@jsulm With some fixes I can build your project.
pro file:QT += core network QT -= gui TARGET = test CONFIG += console CONFIG -= app_bundle TEMPLATE = app INCLUDES += lib/headers/myQLineEdit.h SOURCES += main.cpp \ #myudp.cpp #HEADERS += \ # myudp.h
main.cpp
#include <QCoreApplication> int main(int argc, char *argv[]) { QCoreApplication applicationApp(argc, argv); //clsWindowMain windowMain; //QTimer::singleShot(0, &windowMain, SLOT(slotStart())); int ret = applicationApp.exec(); return ret; }
-
I know what moc files are, but they were not permanently created by QtCreator (not in my build folder).
But can you tell me why I should have to generate them and manually include them when it works to simply add the headers to the project?
I mean, I wanted to reduce work by using INCLUDEPATH and NOT adding all the included headers.
Generating moc files and manually adding them is not reducing but increasing work.Also I do not understand why I should include them when I don't need it if I add the headers directly...
-
It's getting strange now :-D
What is a myudp.cpp ?? I didn't ever used this...
@jsulm
But you are including the header directly now. That is exaclty what I tried to avoid...Why is main.h unusual? I think using headers as a bundle of #include directives for my purposes is the correct way, so in the source file, there only exists one #include directive to its corresponding header file. Not good?
-
It's getting strange now :-D
What is a myudp.cpp ?? I didn't ever used this...
@jsulm
But you are including the header directly now. That is exaclty what I tried to avoid...Why is main.h unusual? I think using headers as a bundle of #include directives for my purposes is the correct way, so in the source file, there only exists one #include directive to its corresponding header file. Not good?
@Binary91 That is what you uploaded:
SOURCES += main.cpp \ myudp.cpp
main.h is unusual because there is no need for it. You only need a header file if you need to include some functionality provided in one source code file in another one. Where do you want to include main.h and why (and please do not say in main.cpp, because there is no need to do it this way)?
I will try to change your project to use INCLUDEPATH. -
It's getting strange now :-D
What is a myudp.cpp ?? I didn't ever used this...
@jsulm
But you are including the header directly now. That is exaclty what I tried to avoid...Why is main.h unusual? I think using headers as a bundle of #include directives for my purposes is the correct way, so in the source file, there only exists one #include directive to its corresponding header file. Not good?