it-roy-ru.com

INCLUDEPATH в файле проекта 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. Что я делаю неправильно?

18
user2794529

Вы должны запустить qmake (build-> run qmake), чтобы проверить изменения в файле pro . Qt creator Добавление внешней библиотеки (по-прежнему: не удается открыть включаемый файл: 'GL/glew.h')

17
Steve James

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

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

  1. Замените ваше включение на

    #include <opencv/cv.h>
    

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

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

  3. Перестройте проект. 

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

8
Kuba Ober

вот один из моих профессиональных файлов:

    # 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. mtBlahRTP.h и mtBlahRTP.cpp находятся в ../../lib

3
ldgorman

Единственная проблема, которую вы делаете, это неправильное связывание библиотеки OpenCV. Другие ответы, приведенные здесь, могут работать или не работать, но я разместил в другом потоке верный способ решения этой проблемы с помощью мастера «Добавить библиотеку» в Qt Creator: https://stackoverflow.com/a/51914928/ 10245006

1
IntenseCorona

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

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

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

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

1
Dynamo72

Я столкнулся с подобной проблемой, и обнаружил, что QtCreator IDE не перечитывает результаты qmake и не обновляет сообщение «Не удается открыть». Вам нужно закрыть поврежденный файл и снова открыть его - тогда вы увидите, что он больше не отображает ошибку.

1
Ian Frisbie

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

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

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

INCLUDEPATH += . \
        ..

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

HEADER += ../canserialcomm.h
0
DBedrenko

Вам нужно сделать несколько вещей. Во-первых, в файле .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». Когда вы сделали все это, он должен скомпилироваться нормально.

0
Donald Duck

В окнах вы должны исключать -I перед каждым каталогом, который добавляется в переменную INCLUDEPATH . Например: В 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.

0
Brian Ng

Каким-то образом это не сработало, когда у меня было несколько INCLUDEPATH + =. Когда я объединил материал в один, он неожиданно сработал.

0
Slava

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

это решит проблему.

0
Raiden Core