我在qmake项目中遇到问题。在我的.pro文件中,我有:
INCLUDEPATH += "C:\OpenCV\build\include"
和我的cpp:
#include <opencv\cv.h>
编译器指示错误:
无法打开包含文件:'opencv \ cv.h':没有这样的文件或目录
但如果我在我的cpp中写这个:
#include "C:\OpenCV\build\include\opencv\cv.h"
它有效!
我在Qt Creator中构建项目。我做错了什么?
答案 0 :(得分:17)
您必须运行qmake(build-&gt; run qmake)来验证专业文件中的更改。 Qt creator Adding external library (still: Cannot open include file: 'GL/glew.h')
答案 1 :(得分:8)
您的问题可能与裸#include
指令is undefined behavior中的反斜杠有关。
执行以下操作。
将您的包替换为
#include <opencv/cv.h>
注意正斜杠!
删除Qt Creator为您制作的影子构建目录。您将在项目目录上方找到它,其名称以build-
开头。
重建项目。
请注意,这需要重新运行qmake。
答案 2 :(得分:3)
这是我的专业档案之一:
# Blah Application
TEMPLATE = app
CONFIG += qt console staticlib debug_and_release
QT -= gui
QT += network sql xml
TARGET = blah
CONFIG(debug, debug|release){
DESTDIR = debug
LIBS += -L../../../lib/core/debug -lcore
} else {
DESTDIR = release
LIBS += -L../../../lib/core/release -lcore
}
DEPENDPATH += . ../../lib ../../../lib/core
INCLUDEPATH += . ../../lib ../../../lib/core
# Library files
HEADERS += mtBlahRTP.h
SOURCES += mtBlahRTP.cpp
# Input
HEADERS +=
SOURCES += main.cpp
include路径指向lib文件的RELATIVE目录。 mtBlahRTP.h和mtBlahRTP.cpp位于../../ lib
答案 3 :(得分:1)
我遇到了类似的问题,我发现QtCreator IDE没有重新读取qmake的结果并更新“无法打开”消息。您需要关闭有问题的文件并重新打开它 - 然后您将看到它不再显示错误。
答案 4 :(得分:1)
我必须做两个步骤:(重新)运行qmake并重建整个项目 - 然后才正确考虑INCLUDEPATH设置。 (在Windows上使用QtCreator 3.5和3.6(Qt 5.5和Qt 5.6)。)
答案 5 :(得分:1)
我有同样的问题,在构建或运行之前,你应该 qmake ( Build =&gt; qmake )。
INCLUDEPATH 的配置:
INCLUDEPATH+=D:\opencv\opencv\build\include
INCLUDEPATH+=D:\opencv\opencv\build\include\opencv
INCLUDEPATH+=D:\opencv\opencv\build\include\opencv2
答案 6 :(得分:1)
您要解决的唯一问题是错误地链接了OpenCV库。此处给出的其他答案可能会或可能不会起作用,但我在另一个线程上发布了一种使用Qt Creator中的“添加库”向导来解决此问题的肯定方法:https://stackoverflow.com/a/51914928/10245006
答案 7 :(得分:0)
我收到了错误:
canserialcomm.o: In function `CanSerialComm::CanSerialComm()':
canserialcomm.cpp:(.text+0xc1): undefined reference to `vtable for CanSerialComm'
事实证明,原因是它无法找到声明该构造函数的canserialcomm.h
。尽管我在项目文件中指向INCLUDEPATH
指向包含该头文件的目录:
INCLUDEPATH += . \
..
我必须做的就是明确指定头文件;我补充说:
HEADER += ../canserialcomm.h
答案 8 :(得分:0)
在带有msvc的qt creator的windows中,你应该使用双反斜杠。像这样: INCLUDEPATH + = C:\\ libcurl \\ libcurl-vc-x64-release-dll-ipv6-sspi-winssl \\ include
这将解决问题。
答案 9 :(得分:0)
在Windows下,您必须在添加到INCLUDEPATH变量的每个目录之前消除-I。 例如: 在Windows下:
INCLUDEPATH += "C:\lib\boost_1_61_0" (back-slash)
在linux&amp; MAC:
INCLUDEPATH += -I"$$(HOME)/lib/boost_1_61_0" (note the -I and forward-slash)
我不确定它是否依赖于不同的qmake版本。但在完成qmake命令后,我检查了Makefile,并且双重-I就是问题。
答案 10 :(得分:0)
你需要做几件事。在.pro文件中,你需要一次引用两个反斜杠,如下所示:
INCLUDEPATH += "C:\\OpenCV\\build\\include\\opencv\\cv.h"
您还需要在.cpp文件的#include
中使用这样的前缀:
#include <opencv/cv.h>
完成此操作后,删除构建文件夹。这是具有非常复杂的build-untitled-Desktop_Qt_5_7_0_MSVC2015_32bit-Release
类型名称的文件夹。然后,在“生成”菜单中,按“运行qmake”。当你完成所有这些后,它应该编译好。
答案 11 :(得分:0)
以某种方式,当我有几个INCLUDEPATH + =时,它不起作用。 当我将这些东西组合成一个单一的东西时,它突然起作用了。