wake-up-neo.net

INCLUDEPATH in qmake-Projektdatei funktioniert nicht

Ich habe ein Problem mit Include in einem qmake-Projekt. In meiner .pro-Datei habe ich:

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

und in meinem cpp: 

#include <opencv\cv.h>

Der Compiler zeigt einen Fehler an: 

Include-Datei kann nicht geöffnet werden: 'opencv\cv.h': Keine Datei oder Verzeichnis

aber wenn ich das in meine cpp schreibe:

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

es klappt!

Ich baue das Projekt aus Qt Creator heraus. Was mache ich falsch?

18
user2794529

Sie müssen qmake ausführen (build-> run qmake), um Änderungen in der Pro-Datei zu überprüfen. Qt creator Externe Bibliothek wird hinzugefügt (noch: Include-Datei kann nicht geöffnet werden: 'GL/glew.h'

17
Steve James

Ihr Problem könnte mit der Tatsache zusammenhängen, dass das Umkehren von umgekehrten #include-Anweisungen ein undefiniertes Verhalten ist.

Mach Folgendes.

  1. Ersetzen Sie Ihr Include durch

    #include <opencv/cv.h>
    

    Beachten Sie den Schrägstrich!

  2. Entfernen Sie das Schattenerstellungsverzeichnis, das Qt Creator für Sie erstellt hat. Sie finden es über dem Projektverzeichnis, dessen Name mit build- beginnt.

  3. Erstellen Sie das Projekt neu. 

Beachten Sie, dass dies für das erneute Ausführen von qmake sorgt.

8
Kuba Ober

hier ist eine meiner Pro-Dateien:

    # 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

Der Include-Pfad verweist auf das RELATIVE-Verzeichnis meiner lib-Dateien. mtBlahRTP.h und mtBlahRTP.cpp sind in ../../lib

3
ldgorman

Das einzige Problem, das Sie machen, ist die falsche Verknüpfung der OpenCV-Bibliothek. Die anderen hier gegebenen Antworten funktionieren möglicherweise nicht, aber ich habe in einem anderen Thread eine todsichere Methode zur Lösung dieses Problems mit dem Assistenten zum Hinzufügen von Bibliotheken in Qt Creator veröffentlicht: https://stackoverflow.com/a/51914928/ 10245006

1
IntenseCorona

Ich habe die gleiche Frage, bevor Sie bauen oder ausführen, sollten Sie qmake (Build => qmake) damit.

Meine Konfigurationen für INCLUDEPATH:

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

Ich musste zwei Schritte ausführen: qmake erneut ausführen und das gesamte Projekt neu erstellen - nur dann wurde die Einstellung INCLUDEPATH korrekt berücksichtigt. (Mit QtCreator 3.5 und 3.6 (Qt 5.5 und Qt 5.6) unter Windows.)

1
Dynamo72

Ich bin auf ein ähnliches Problem gestoßen und habe festgestellt, dass der QtCreator IDE die Ergebnisse von qmake nicht erneut liest und die Meldung "Cannot Open" nicht aktualisiert. Sie müssen die fehlerhafte Datei schließen und erneut öffnen - dann wird der Fehler nicht mehr angezeigt.

1
Ian Frisbie

Ich habe den Fehler erhalten:

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

Es stellt sich heraus, dass die Ursache darin liegt, dass canserialcomm.h nicht gefunden werden konnte, wo der Konstruktor deklariert wurde. Dies war, obwohl ich INCLUDEPATH in der Projektdatei auf das Verzeichnis verweise, das diese Header-Datei enthält:

INCLUDEPATH += . \
        ..

Was ich tun musste, um dies zu beheben, ist die Header-Datei explizit anzugeben; Ich fügte hinzu:

HEADER += ../canserialcomm.h
0
DBedrenko

Sie müssen mehrere Dinge tun. Faust, in der .pro-Datei benötigen Sie Anführungszeichen zu jeweils zwei umgekehrten Schrägstrichen:

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

Sie benötigen auch einen Frontslash im #include in Ihrer .cpp-Datei wie folgt:

#include <opencv/cv.h>

Wenn Sie dies getan haben, löschen Sie den Build-Ordner. Dies ist der Ordner mit einem sehr komplizierten Namen vom Typ build-untitled-Desktop_Qt_5_7_0_MSVC2015_32bit-Release. Drücken Sie dann im Menü Erstellen auf "qmake ausführen". Wenn Sie all dies getan haben, sollte es gut kompilieren.

0
Donald Duck

Unter Windows müssen Sie die Option -I vor jedem Verzeichnis entfernen, das der Variablen INCLUDEPATH hinzugefügt wird . Beispiel: Unter Windows:

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

Unter Linux & Mac:

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

Ich bin mir nicht sicher, ob es auf unterschiedliche qmake-Versionen ankommt oder nicht. Aber nachdem ich qmake beendet habe, überprüfe ich das Makefile und das Doppelte -I ist das Problem.

0
Brian Ng

Irgendwie funktionierte es nicht, als ich mehrere INCLUDEPATH + = hatte. Wenn ich das Zeug zu einer Single kombinierte, funktionierte es plötzlich.

0
Slava

Sie sollten doppelte Backslashes in Windows für qt creator with msvc verwenden. wie folgt: INCLUDEPATH + = C: \\ libcurl \\ libcurl-vc-x64-release-dll-ipv6-sspi-winssl \\ include

dadurch wird das Problem behoben.

0
Raiden Core