首页 文章

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

提问于
浏览
17

我在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 回答

  • 8

    您必须运行qmake(build-> run qmake)来验证专业文件中的更改 . Qt creator Adding external library (still: Cannot open include file: 'GL/glew.h')

  • 1

    你的问题可能与赤裸裸的 #include 指令is undefined behavior中有反斜杠的事实有关 .

    请执行下列操作 .

    • 用您的包含替换
    #include <opencv/cv.h>
    

    注意正斜杠!

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

    • 重建项目 .

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

  • 16

    这是我的专业文件之一:

    # 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中

  • 0

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

  • 0

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

  • 0

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

    我对INCLUDEPATH的配置:

    INCLUDEPATH+=D:\opencv\opencv\build\include
    INCLUDEPATH+=D:\opencv\opencv\build\include\opencv
    INCLUDEPATH+=D:\opencv\opencv\build\include\opencv2
    
  • 0

    您遇到的唯一问题是错误地链接OpenCV库 . 这里给出的其他答案可能有效,也可能无效,但我已经在另一个线程上发布了使用Qt Creator中的"Add Library"向导解决此问题的可靠方法:https://stackoverflow.com/a/51914928/10245006

  • 0

    我收到了错误:

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

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

    INCLUDEPATH += . \
            ..
    

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

    HEADER += ../canserialcomm.h
    
  • 1

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

    这将解决问题 .

  • 1

    在Windows下,您必须在添加到INCLUDEPATH变量的每个目录之前消除-I . 例如:在Windows下:

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

    在linux和mac下:

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

    我不确定它是否依赖于不同的qmake版本 . 但在完成qmake命令后,我检查Makefile并且双-I是问题 .

  • 1

    你需要做几件事 . Fist,在.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 类型名称的文件夹 . 然后,在“生成”菜单中,按"Run qmake" . 当你完成所有这些,它应该编译好 .

  • 3

    不知何故,当我有几个INCLUDEPATH =时,它不起作用 . 当我将这些东西组合成一个单独的东西突然工作 .

相关问题