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?
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')
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.
Remplacez votre inclusion par
#include <opencv/cv.h>
Notez la barre oblique!
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-
.
Reconstruisez le projet.
Notez que cela permet de réexécuter qmake.
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
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
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
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.)
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.
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
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.
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.
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é.
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.