INCLUDEPATH в файле проекта qmake не работает

У меня возникла проблема с включением в проект qmake. В моем файле .pro у меня есть:

INCLUDEPATH += "C:\OpenCV\build\include"

и в моем cpp:

#include <opencv\cv.h>

Компилятор указывает на ошибку:

Невозможно открыть файл include: 'opencv\cv.h': нет такого файла или каталога

но если я напишу это в своем cpp:

#include "C:\OpenCV\build\include\opencv\cv.h"

он работает!

Я создаю проект из Qt Creator. Что я делаю неправильно?

Ответ 2

Ваша проблема может быть связана с тем, что наличие обратных косых черт в голой директиве #include - это поведение undefined.

Сделайте следующее.

  • Замените include

    #include <opencv/cv.h>
    

    Обратите внимание на косую черту!

  • Удалите каталог теневой сборки, созданный для вас Qt Creator. Вы найдете его над каталогом проекта, его имя начинается с build-.

  • Восстановите проект.

Обратите внимание, что это связано с повторным запуском qmake.

Ответ 3

здесь один из моих файлов pro:

    # 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

Включенный путь указывает на каталог RELATIVE для моих файлов lib. mtBlahRTP.h и mtBlahRTP.cpp находятся в../../lib

Ответ 4

У меня возникла аналогичная проблема, и я обнаружил, что среда QtCreator не перечитывает результаты qmake и не обновляет сообщение "Can not open". Вам нужно закрыть нарушительный файл и снова открыть его - тогда вы увидите, что он больше не отображает ошибку.

Ответ 5

Мне пришлось сделать два шага: (повторить) запустить qmake и перестроить весь проект - только после этого параметр INCLUDEPATH был рассмотрен правильно. (С QtCreator 3.5 и 3.6 (Qt 5.5 и Qt 5.6) в Windows.)

Ответ 6

У меня есть тот же вопрос, перед тем как создавать или запускать, вы должны qmake (Build = > qmake).

Мои настройки для INCLUDEPATH:

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

Ответ 7

Я получал ошибку:

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

Оказывается, причина в том, что он не смог найти canserialcomm.h, где объявлен этот конструктор. Это было несмотря на то, что INCLUDEPATH в файле проекта указывал на каталог, содержащий этот файл заголовка:

INCLUDEPATH += . \
        ..

Что мне нужно было сделать, чтобы исправить это, явно указать заголовочный файл; Я добавил:

HEADER += ../canserialcomm.h

Ответ 8

Вы должны использовать двойную обратную косую черту, когда в windows для qt-создателя с msvc. как это: INCLUDEPATH + = C:\\libcurl\\libcurl-vc-x64-release-dll-ipv6-sspi-winssl\\include

это устранит проблему.

Ответ 9

В окнах вам нужно устранить -I перед каждым каталогом, который добавляется в переменную INCLUDEPATH. Например: Под окнами:

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 и double - это проблема.

Ответ 10

Вам нужно сделать несколько вещей. Fist, в .pro файле вам понадобятся кавычки для двух обратных косых черт, например:

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

Вы также нуждаетесь в frontslash в #include в вашем .cpp файле, например:

#include <opencv/cv.h>

Когда вы это сделаете, удалите папку сборки. Это папка с очень сложным именем типа build-untitled-Desktop_Qt_5_7_0_MSVC2015_32bit-Release. Затем в меню "Построение" нажмите "Запустить qmake". Когда вы все это сделали, он должен скомпилироваться.