在运行Qt程序时,有时候其他文件使用某个头文件可以运行,但是到自己这里调用某个头文件时就会报出 No such file or directory 问题。这个一般由于可能安装了多个Qt版本导致qmake调用错误,这个可以再Makefile文件中查看QMAKE变量确认程序使用的是哪个qmake。如果qmake版本没问题就要在Makefile文件中查看INCPATH = -I../Qt5.3.1/5.3/gcc_64/mkspecs/linux-g++ -I. -I. -I../Qt5.3.1/5.3/gcc_64/include -I../Qt5.3.1/5.3/gcc_64/include/QtGui -I../Qt5.3.1/5.3/gcc_64/include/QtCore -I.比如我的错误是头文件QQmlApplicationEngine不能找到,该文件在../include/QtQml/QQmlApplicationEngine下,是不是在头文件添加QtQml/ QQmlApplicationEngine就好了,答案是否定的。因为同文件下也使用了QGuiApplication头文件,但是该文件在INCPATH中的路径../Qt5.3.1/5.3/gcc_64/include/QtGui是正确的。那么原因是什么呢?会不会是.pro文件?
大家可以想下Makefile文件是如何生成的,是qmake根据.pro文件编译后产生的,了解这里之后,我在.pro文件中添加include(deployment.pri) QT += qml quick quick-private,然后问题就解决了。
.pro文件中各变量意义:
HEADERS 指定工程的 C++头文件(.h)。 ◆ SOURCES 指定工程的C++实现文件(.cpp)。 ◆ FORMS 指定需要 uic 处理的由 Qt 设计师生成的.ui 文件。 ◆ RESOURCES 指定需要 rcc 处理的.qrc 文件。 ◆ DEFINES 指定预定义的 C++预处理符号。 ◆ INCLUDEPATH 指定 C++编译器搜索全局头文件的路径。 ◆ LIBS 指定工程要链接的库。库既可以通过绝对路径指定,也可以使用源自 Unix 的-L 和-l 标识符来指定(例如,-L/usr/local/lib 和-ldb_cxx)。 ◆ CONFIG 指定各种用于工程配置和编译的参数。 ◆ QT 指定所要使用的 Qt 模块(默认是 core gui,对应于 QtCore 和 QtGui 模块)。 ◆ VERSION 指定目标库的版本号。 ◆ TARGET 指定可执行文件或库的基本文件名,其中不包含任何的扩展、前缀或版本 号(默认的是当前的目录名)。 ◆ DESTDIR 指定可执行文件放置的目录(默认值是平台相关的。 例如,在 Linux 上,指当前目录;在 Windows 上,则是指 debug 或 release 子目 录)。 ◆ DLLDESTDIR 指定目标库文件放置的目录(默认路径与 DESTDIR 相同)。 CONFIG 变量用来控制编译过程中的各个方面。它支持下面这些参数: ◆ debug 是指具有调试信息的可执行文件或者库,链接 Qt 库的调试版。 ◆ release 是指编译不具有调试信息的可执行文件或者库,链接发行版的 Qt 库。如果 同时指定 debug 和 release,则 debug 有效。 ◆ warn_off 会关闭大量的警告。默认情况下,警告的状态是打开的。 ◆ qt 是指应用程序或者库使用 Qt。这一选项是默认包括的。 ◆ dll 是指动态编译库。 ◆ staticlib 是指静态编译库。 ◆ plugin 是指编译一个插件。插件总是动态库,因此这一参数暗含 dll 参数。 ◆ console 是指应用程序需要写控制台(使用 cout、cerr、qWarning(),等等)。 ◆ app_bundle 只适用于 Mac OS X 编译,是指可执行文件被放到束中,这是 Mac OS X 的默认情况。 ◆ lib_bundle 只适用于 Mac OS X 编译,指库被放到框架中。
