web-dev-qa-db-fra.com

INCLUDEPATH dans le fichier de projet qmake ne fonctionne pas

J'ai un problème avec include dans un projet qmake. Dans mon fichier .pro j'ai:

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

et dans mon cpp: 

#include <opencv\cv.h>

Le compilateur indique une erreur: 

Impossible d'ouvrir le fichier d'inclusion: 'opencv\cv.h': aucun fichier ou répertoire de ce type

mais si j'écris ceci dans mon cpp:

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

Ça marche!

Je construis le projet à partir de Qt Creator. Qu'est-ce que je fais mal?

18
user2794529

Vous devez exécuter qmake (build-> run qmake) pour valider les modifications dans le fichier pro . Qt creator Ajouter une bibliothèque externe (encore: impossible d'ouvrir le fichier d'inclusion: 'GL/glew.h')

17
Steve James

Votre problème peut être lié au fait que le fait d'avoir des barres obliques inverses dans les directives #include/naked nues constitue un comportement non défini .

Faites ce qui suit.

  1. Remplacez votre inclusion par

    #include <opencv/cv.h>
    

    Notez la barre oblique!

  2. Supprimez le répertoire de construction de shadow que Qt Creator a créé pour vous. Vous le trouverez au-dessus du répertoire du projet, son nom commence par build-.

  3. Reconstruisez le projet. 

Notez que cela permet de réexécuter qmake.

8
Kuba Ober

voici un de mes fichiers 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

Le chemin d’inclusion pointe vers le répertoire RELATIVE de mes fichiers lib. mtBlahRTP.h et mtBlahRTP.cpp sont dans ../../lib

3
ldgorman

Le seul problème que vous rencontrez est la liaison incorrecte de la bibliothèque OpenCV. Les autres réponses données ici peuvent ne pas fonctionner, mais j'ai posté sur un autre fil un moyen infaillible de résoudre ce problème en utilisant l'assistant "Ajouter une bibliothèque" de Qt Creator: https://stackoverflow.com/a/51914928/ 10245006

1
IntenseCorona

J'ai la même question, avant de construire ou de lancer, vous devriez qmake (Build => qmake).

Mes configurations pour INCLUDEEPATH:

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

Je devais faire deux étapes: (re) exécuter qmake et reconstruire le projet entier - alors seulement, le paramètre INCLUDEPATH était considéré correctement. (Avec QtCreator 3.5 et 3.6 (Qt 5.5 et Qt 5.6) sous Windows.)

1
Dynamo72

J'ai rencontré un problème similaire et ce que j'ai découvert est que QtCreator IDE ne relit pas les résultats de qmake et ne met pas à jour le message "Ouverture impossible". Vous devez fermer le fichier incriminé et le rouvrir - vous verrez alors qu’il n’affiche plus l’erreur.

1
Ian Frisbie

Je recevais l'erreur:

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

Il s’avère que la cause est qu’il n’a pas pu trouver canserialcomm.h où ce constructeur est déclaré. Ceci malgré le fait que INCLUDEPATH dans le fichier de projet pointe vers le répertoire contenant ce fichier d’en-tête:

INCLUDEPATH += . \
        ..

Ce que j'ai dû faire pour résoudre ce problème est de spécifier explicitement le fichier d'en-tête; J'ai ajouté:

HEADER += ../canserialcomm.h
0
DBedrenko

Vous devez faire plusieurs choses. Premièrement, dans le fichier .pro, vous avez besoin de guillemets avec deux barres obliques inverses à la fois, comme ceci:

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

Vous avez également besoin d'une barre oblique dans le #include dans votre fichier .cpp comme ceci:

#include <opencv/cv.h>

Lorsque vous avez terminé, supprimez le dossier de construction. C'est le dossier avec un nom très compliqué du type build-untitled-Desktop_Qt_5_7_0_MSVC2015_32bit-Release. Ensuite, dans le menu Build, appuyez sur "Run qmake". Quand vous avez fait tout cela, la compilation devrait bien se dérouler.

0
Donald Duck

Sous Windows, vous devez éliminer le -I avant chaque répertoire ajouté à la variable INCLUDEPATH . Par exemple: Sous Windows:

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

Sous linux et mac:

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

Je ne suis pas sûr que cela dépende de la version de qmake ou non. Mais après avoir fini la commande qmake, je vérifie le Makefile et le double -I est le problème.

0
Brian Ng

En quelque sorte, cela n’a pas fonctionné lorsque j’ai eu plusieurs INCLUDEPATH + =. Quand j'ai combiné le contenu en un single, cela a soudainement fonctionné.

0
Slava

Vous devez utiliser des doubles barres obliques inverses lorsque vous vous trouvez dans Windows pour qt creator avec msvc. comme ceci: INCLUDEPATH + = C: \\ libcurl \\ libcurl-vc-x64-release-dll-ipv6-sspi-winssl \\ include

cela résoudra le problème.

0
Raiden Core