qmake项目文件中的INCLUDEPATH不起作用

时间:2013-09-27 10:06:43

标签: qt qt-creator qmake

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

12 个答案:

答案 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中的反斜杠有关。

执行以下操作。

  1. 将您的包替换为

    #include <opencv/cv.h>
    

    注意正斜杠!

  2. 删除Qt Creator为您制作的影子构建目录。您将在项目目录上方找到它,其名称以build-开头。

  3. 重建项目。

  4. 请注意,这需要重新运行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 + =时,它不起作用。 当我将这些东西组合成一个单一的东西时,它突然起作用了。