为什么Qt Creator在包含的路径中找不到包含的标头 - 即使qmake能够找到它们
Why doesn't Qt Creator find included headers in included paths - even though qmake is able to find them
我加入了一个已经存在的(开源)Qt4项目来添加一些功能。该项目使用Qt 4.8.5在Linux Slackware上完美编译和运行。作为IDE,我第一次使用KDevelop(随Slackware一起提供),但KDevelop不支持Qt项目文件(因为它主要使用cmake,所以我不得不使用makefile来导入项目)。现在我想切换到QtCreator,但包含(相对)路径中的头文件无法识别。例如,项目文件位于"dir0/programs/prog1/prog1"中,一些额外的标头位于"dir0-gui/extra.h"中。"dir0/gui"通过项目文件中的INCLUDEPATH += ../../gui
行添加到搜索路径中。如果我把鼠标悬停在项目的.h文件中的#include "extra.h"
上,我总是会弹出一个弹出窗口,上面写着"extra.h:没有这样的文件或目录"。
在KDevelop中没有问题,qmake也得到了它。Creator的问题是什么(我用的是2.8,也试过3.0)
非常感谢任何帮助:-)
Konrad
EDIT:我刚刚意识到,整个Qt框架也没有得到Qt创建者的认可。当我键入#include "
时,自动完成建议的标题都位于"/usr/include"或项目目录中。例如,我甚至不能做#include <QtGui>
。
这里可能有什么问题?
EDIT2:项目文件还包括其他几个项目也使用的gui.pri和local.pri。我试着对文件进行了一点压缩——它仍然可以编译,没有问题。
位于"dir0/programs/us_convert"中的实际项目文件
include( ../../gui.pri )
QT += xml
TARGET = us_convert
HEADERS = us_convert_gui.h
us_convert.h
us_convertio.h
us_experiment.h
us_experiment_gui.h
us_selectbox.h
us_intensity.h
us_get_dbrun.h
us_mwl_data.h
SOURCES = us_convert_gui.cpp
us_convert.cpp
us_convertio.cpp
us_experiment.cpp
us_experiment_gui.cpp
us_selectbox.cpp
us_intensity.cpp
us_get_dbrun.cpp
us_mwl_data.cpp
guid.pri位于"dir0/"中
# Profile include file for applications
!include( local.pri ) error( "local.pri is missing. Copy from local.pri.template and update variables as appropriate" )
TEMPLATE = app
DESTDIR = ../../bin
MOC_DIR = ./moc
OBJECTS_DIR = ./obj
VER = 10
CONFIG += $$DEBUGORRELEASE qt thread warn
unix {
LIBS += -L../../lib -lus_gui -lus_utils
LIBS += -lcrypto
LIBS += -lqwtplot3d-qt4 -lGLU
LIBS += -L$$MYSQLDIR -lmysqlclient
DEFINES += INTEL LINUX
INCLUDEPATH += $$MYSQLPATH ../../$$QWT3D/include
INCLUDEPATH += ../../gui ../../utils $$QWTPATH/include ..
}
和local.pri,也位于"dir0/"中
DEBUGORRELEASE += debug
unix {
MYSQLPATH = /usr/include/mysql/
QWTPATH = /usr/local/qwt-5.2.2
SINGLEDIR = /usr/lib/qt/qt-solutions/qtsingleapplication/src
MYSQLDIR = /usr/include/mysql
QWT3D = /qwtplot3d-qt4/
LIBS += -L/usr/local/qwt-5.2.2/lib -lqwt
}
我使用premake和make来构建我的项目,并将QtCreator作为IDE。我遇到了和您相同的问题,使用了仅头库GLM。我的源代码包含以下行:#include <glm/glm.hpp>
。它编译时没有出错,但QT Creator找不到文件,所以我无法通过按住CTRL键并单击库提供的一些函数来跳转到它或它包含的函数。
在我的项目文件夹中有一个名为"Tree.includes"的文件,其中"Tree"是我的QT Creator项目的名称。我不得不将路径添加到我使用的库中,结果成功了。
usedLibraries/glm/
我的"Tree.includes"文件如下:
project/src
usedLibraries/glm/
usedLibraries/glew-1.11.0/include/
usedLibraries/glfw-3.0.4/include/
我的项目文件夹如下:
.
├── project
│ ├── bin
│ ├── build
│ ├── gcc.txt
│ ├── include
│ ├── Makefile
│ ├── premake4.lua
│ └── src
├── Tree.config
├── Tree.creator
├── Tree.creator.user
├── Tree.files
├── Tree.includes
└── usedLibraries
├── glew-1.11.0
├── glfw-3.0.4
└── glm
我知道我的答案很晚了,但我遇到了同样的问题,在很多不同的帖子中都没有解决方案,但后来我找到了一个对我有效的解决方案:
你必须在.pro文件中添加你正在使用的模块:
例如,我想使用#include<QtSql>
模块,但什么都不起作用。编译器找不到此文件。然而,我发现我可以使用#include<QtSql/QSqlDatabase>
(以及在QtSql中声明的所有类型),但随后我出现了"undefined reference"
错误。
解决方案:您必须在.pro文件中添加您正在使用的模块,如下所示:
QT = core gui
(这是我默认情况下的样子)这就是我现在的样子,也是它对我的作用:
QT = core gui sql
希望这能帮助其他有同样问题的人。
这在Windows和Ubuntu上都有效!
您应该在.pro文件中也包含HEADERS。
HEADERS += ../../gui/extra.h
完成此操作后,保存您的项目,让它进行解析。然后删除您现有的构建文件夹(不要只是清理),然后尝试重新构建。
我遇到了同样的问题,我的问题是标题和源之间有一行空行:
HEADERS +=
#<- 1- this line was first problem
blabla.h #<- 2- and added $$PWD here too
我把它改成这个:
INCLUDEPATH += $$PWD
HEADERS +=
$$PWD/qquickgridstar.h
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 使用mongocxx驱动程序时包含头文件问题
- 如何在h文件中包含.o对象文件
- 在混合代码库中将C转换为C++时出现许多包含错误
- 如何在 QMake 中包含 python.h
- 如何告诉qmake在从dbus xml生成文件时包含标头
- 如何从 qmake 中的包含路径中删除项目的根目录
- 将 Makefile 包含在 qmake 中,继承属性
- 在我的 qmake 项目中包含另一个项目的 qmake 文件
- 为什么Qt Creator在包含的路径中找不到包含的标头 - 即使qmake能够找到它们
- Qmake-如何配置包含路径顺序
- qmake为win32-g++平台生成的Makefile包含unix命令
- QMake 安装头文件(复制到系统的包含目录)