cmake find_path nicht wie erwartet funktioniert
Habe ich Folgendes CMake-Skript, es funktioniert:
find_path(
GLES_SDK_INCLUDE_DIR
NAMES "GLES2/gl2.h"
PATHS "${CMAKE_FRAMEWORK_PATH}/include")
Aber das kehrt man eine -NOTFOUND
:
find_path(
GLES_SDK_INCLUDE_DIR
NAMES "gl2.h"
PATHS "${CMAKE_FRAMEWORK_PATH}/include/GLES2")
Warum? Irgendeine Idee?
- So, beide codes funktionieren nicht? Müssen Sie tatsächlich eine Datei
${CMAKE_FRAMEWORK_PATH}/include/GLES2/gl2.h
? (Sie können die Ausgabe-Pfad mitmessage()
Befehl für das Ergebnis der Dereferenzierung). Verwenden Sie cross-kompilieren? - Nein, der erste code funktioniert. Nicht den zweiten code ! Es ist der Grund, warum es seltsam aussieht ?
- Ja, das sieht seltsam aus. Und was ist das Ergebnis der Suche in der ersten(erfolgreichen) Fall?
- Ich Stimme mit Tsyvarev beide Befehle sollten funktionieren, wenn die Datei vorhanden ist (obwohl der zweite gibt einen anderen Weg als die erste). Wir werden mehr Informationen benötigen, um Ihnen dabei helfen: Bitte setzen Sie together komplett, minimal-Beispiel. Auch die genaue Ausgabe produziert, die von den ersten finden, die hilfreich sein könnten.
- Ich denke, es ist ein problem mit caching.
- Es ist nicht mehr code, alles ist hier enthalten in einer FindGLES.cmake Datei. Ich glaube nicht, dass eine Zwischenspeicherung im Zusammenhang, denn ich beginne einen neuen build erstellen und ich lösche alle Variablen manuell (CMake-GUI). Auch dann, wenn der .cmake-Datei enthält nur die zweite find_path, es ist gescheitert !
- Bitte geben Sie genau Inhalt der variable
GLES_SDK_INCLUDE_DIR
nach der ersten (erfolgreichen) Skript. E. g., mitmessage("Result: ${GLES_SDK_INCLUDE_DIR}")
. Dies kann werfen etwas Licht auf das problem. Kein muss aggressiv sein: wir wollen, um das problem zu beheben zu. Dies ist üblich, debugging-Verfahren, wenn man prüft viele Dinge, die offensichtlich zu sein scheint. - Tut
find_path(GLES_SDK_INCLUDE_DIR NAMES "GLES2/gl2.h")
auch arbeiten? Meine Vermutung ist, dass CMake findet den header in der Standard-Pfade.CMAKE_FRAMEWORK_PATH
scheint eine seltsame Wahl, als eine weitere Suche nach Weg, da die variable enthält eine "Liste der Verzeichnisse, die Angabe eines Suchpfades für OS X-frameworks verwendet, die von der find_library(), find_package(), find_path(), und find_file() Befehle." Dass gesagt, Sie könnten versuchen, hinzufügenPATH_SUFFIXES "include/GLES2"
stattPATHS "${CMAKE_FRAMEWORK_PATH}/include/GLES2"
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Drehen mein Kommentar in eine Antwort
In Ihrem ersten Fall CMake funktioniert einfach finden Sie den header in der Standard-Pfade.
CMAKE_FRAMEWORK_PATH
scheint eine seltsame Wahl, als eine weitere Suche nach Weg, da die variable enthält eine "Liste der Verzeichnisse, die Angabe eines Suchpfades für OS X-frameworks verwendet, die von der find_library(), find_package(), find_path(), und find_file() Befehle".Habe ich dein Beispiel versuche auf meinem Ubuntu-distribution, und ich konnte Ihr problem reproduzieren mit der fließenden test:
CMakeLists.txt
Gibt
Lösung
Verwenden
PATH_SUFFIXES "include/GLES2"
oder nurPATH_SUFFIXES "GLES2"
statt:Nicht geben:
PATH_SUFFIXES
. Was mich verwirrt ist, warum#include <GLES2/gl2.h>
funktioniert, wenn der include-Pfad in der Ninja-Datei z.B."C:\sdk\GL\include\GLES2\"
. BTW. Ich benutze VS-Code und Visual Studio. Was ich im Grunde tun, ist, ich freue mich für die Existenz der header in meinem Paket finden-Module und setzen, wie die jeweilige variable. Alles was ich will zu tun ist, um die root-include-Verzeichnis in den include-Suchpfad z.B."C:\sdk\GL\include\"