21

我在 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 中构建项目。我究竟做错了什么?

4

12 回答 12

17

您必须运行 qmake(build->run qmake) 来验证 pro 文件中的更改。 Qt 创建者添加外部库(仍然:无法打开包含文件:'GL/glew.h')

于 2014-12-24T13:40:44.817 回答
8

您的问题可能与裸#include指令中的反斜杠是未定义行为有关。

请执行下列操作。

  1. 将您的包含替换为

    #include <opencv/cv.h>
    

    注意正斜杠!

  2. 删除 Qt Creator 为您创建的影子构建目录。您会在项目目录上方找到它,它的名称以build-.

  3. 重建项目。

请注意,这需要重新运行 qmake。

于 2013-09-27T13:22:13.303 回答
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

包含路径指向我的 lib 文件的 RELATIVE 目录。mtBlahRTP.h 和 mtBlahRTP.cpp 位于 ../../lib

于 2013-09-27T10:10:50.050 回答
3

我有同样的问题,在构建或运行之前,你应该qmake ( Build=>qmake ) 它。

我对INCLUDEPATH的配置:

INCLUDEPATH+=D:\opencv\opencv\build\include
INCLUDEPATH+=D:\opencv\opencv\build\include\opencv
INCLUDEPATH+=D:\opencv\opencv\build\include\opencv2
于 2017-01-20T13:48:00.523 回答
1

我遇到了类似的问题,我发现 QtCreator IDE 没有重新读取 qmake 的结果并更新“无法打开”消息。您需要关闭有问题的文件并重新打开它 - 然后您会看到它不再显示错误。

于 2015-08-27T20:41:43.630 回答
1

您正在做的唯一问题是不正确地链接 OpenCV 库。此处给出的其他答案可能有效,也可能无效,但我已经在另一个线程上发布了使用 Qt Creator 中的“添加库”向导解决此问题的可靠方法:https ://stackoverflow.com/a/51914928/10245006

于 2018-08-19T06:24:11.503 回答
1

我必须做两个步骤:(重新)运行 qmake 并重建整个项目 - 只有这样 INCLUDEPATH 设置才被认为是正确的。(在 Windows 上使用 QtCreator 3.5 和 3.6(Qt 5.5 和 Qt 5.6)。)

于 2016-02-19T12:11:07.843 回答
0

当我有几个 INCLUDEPATH += 时,不知何故它不起作用。当我将这些东西组合成一个单曲时,它突然起作用了。

于 2018-08-07T12:09:05.680 回答
0

我收到了错误:

canserialcomm.o: In function `CanSerialComm::CanSerialComm()':
canserialcomm.cpp:(.text+0xc1): undefined reference to `vtable for CanSerialComm'

事实证明,原因是它无法找到canserialcomm.h该构造函数的声明位置。尽管我INCLUDEPATH在项目文件中指向包含该头文件的目录:

INCLUDEPATH += . \
        ..

我必须做的是明确指定头文件;我补充说:

HEADER += ../canserialcomm.h
于 2016-03-30T09:47:02.337 回答
0

Under windows you have to eliminate the -I before each directory that is added into the INCLUDEPATH variable. For example: Under windows:

INCLUDEPATH += "C:\lib\boost_1_61_0" (back-slash)

Under linux & mac:

INCLUDEPATH += -I"$$(HOME)/lib/boost_1_61_0" (note the -I and forward-slash)

I'm not sure whether it depends on different qmake version or not. But after finishing qmake command, I check the Makefile and the double -I is the issue.

于 2016-08-30T15:28:07.623 回答
0

你需要做几件事。拳头,在.pro文件中,你需要一次用两个反斜杠加引号,像这样:

INCLUDEPATH += "C:\\OpenCV\\build\\include\\opencv\\cv.h"

您还需要#include在 .cpp 文件中使用正斜杠,如下所示:

#include <opencv/cv.h>

完成此操作后,删除构建文件夹。这是类型名称非常复杂的文件夹build-untitled-Desktop_Qt_5_7_0_MSVC2015_32bit-Release。然后,在 Build 菜单中,按“Run qmake”。完成所有这些后,它应该可以正常编译。

于 2017-01-12T13:48:27.313 回答
0

在带有 msvc 的 qt creator 的 windows 中,您应该使用双反斜杠。像这样: INCLUDEPATH += C:\\libcurl\\libcurl-vc-x64-release-dll-ipv6-sspi-winssl\\include

这将解决问题。

于 2016-06-15T08:28:36.810 回答