Glad: Probleme mit CMake unter Windows

Erstellt am 21. Sept. 2018  ·  7Kommentare  ·  Quelle: Dav1dde/glad

Hallo,

Ich habe Probleme, mit CMake unter Windows zufrieden zu sein. Ich möchte froh, dass es als Teil unseres CMake-Build-Prozesses ausgeführt wird und die generierten froh.h/lib-Dateien in unserem Projekt verwenden.

Zum Testen sieht meine Ordnerstruktur wie folgt aus:
C:\Users\me\projects\glad (von GitHub geklont)
C:\Users\me\projects\glad-driver (neues Verzeichnis mit nichts außer einer CMakeLists.txt)

Ich habe auch leere build\ Verzeichnisse aus jedem dieser Verzeichnisse erstellt.

Der Inhalt von glad-driver\CMakeLists.txt ist:

cmake_minimum_required(VERSION 3.0)
set(glad_DIR "..\\glad\\build")
find_package(glad REQUIRED)

Hier sind die Befehle, mit denen ich versuche, frohe Treiber zu bauen. Führen Sie zuerst CMake auf froh aus:

> CD froh\build
> cmake -DGLAD_INSTALL=ON ..

Ergebnis:

-- Erstellen für: Visual Studio 15 2017
-- Die C-Compiler-Identifikation lautet MSVC 19.15.26729.0
-- Überprüfen Sie, ob der C-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe
-- Überprüfen Sie, ob der C-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe -- funktioniert
-- Erkennung von C-Compiler-ABI-Infos
-- C-Compiler-ABI-Informationen erkennen - fertig
-- Erkennung von C-Kompilierungsfunktionen
-- C-Kompilierungsfunktionen erkennen - fertig -
-- PythonInterp gefunden: C:/Users/me/AppData/Local/Programs/Python/Python36/python.exe (gefundene Version "3.6.5")
-- Konfiguration fertig
-- Generieren fertig
-- Build-Dateien wurden geschrieben nach: C:/Users/me/projects/glad/build

Kompilieren Sie als Nächstes die generierten Visual Studio-Projekte:

> msbuild /p:Configuration=ALL_BUILD.vcxproj . freigeben

Ergebnis:
(Viele Sachen dann):

Fertig Bauprojekt "C:\Users\me\projects\glad\build\ALL_BUILD.vcxproj" (Standardziele).

Aufbau gelungen.
0 Warnung(en)
0 Fehler

Verstrichene Zeit 00:00:02.08

Versuchen Sie im letzten Schritt, mit dem Befehl find_package CMake froh zu werden:

> cd ....\glad-driver\build
> cmake ..

Ergebnis:

-- Erstellen für: Visual Studio 15 2017
-- Die C-Compiler-Identifikation lautet MSVC 19.15.26729.0
-- Die CXX-Compiler-Identifikation lautet MSVC 19.15.26729.0
-- Überprüfen Sie, ob der C-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual >Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe
-- Überprüfen Sie, ob der C-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe -- funktioniert
-- Erkennung von C-Compiler-ABI-Infos
-- C-Compiler-ABI-Informationen erkennen - fertig
-- Erkennung von C-Kompilierungsfunktionen
-- C-Kompilierungsfunktionen erkennen - fertig -
-- Überprüfen Sie, ob der CXX-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe
-- Überprüfen Sie, ob der CXX-Compiler funktioniert: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.15.26726/bin/Hostx86/x86/cl.exe -- funktioniert
-- Erkennung von CXX-Compiler-ABI-Informationen
-- Erkennung von CXX-Compiler-ABI-Informationen - fertig
-- Erkennung von CXX-Kompilierungsfunktionen
-- Erkennung von CXX-Kompilierungsfunktionen - fertig
CMake-Fehler bei C:/Users/me/projects/glad/build/gladConfig. cmake:27 (enthalten):
include konnte Ladedatei nicht finden:

C:/Users/me/projects/glad/build/gladTargets.cmake

Anrufliste (letzter Anruf zuerst):
CMakeLists. txt:3 (find_paket)

-- Konfiguration unvollständig, Fehler aufgetreten!
Siehe auch "C:/Users/me/projects/glad-driver/build/CMakeFiles/CMakeOutput.log".

Weitere Untersuchungen zeigen, dass sich die Datei "gladTargets.cmake" (und ein paar scheinbar verwandte Dateien tatsächlich unter) befinden:

C:\Users\me\projects\glad\build\CMakeFiles\Export\lib\cmake\glad\gladTargets.cmake

Ich weiß nicht, warum gladConfig.cmake in build und gladTargets.cmake in build\CmakeFiles\Export\lib\cmake\glad landet.

Wenn ich gladTargets.cmake in das Verzeichnis glad\build kopiere und CMake von froh-Treiber erneut ausführe, dann ist mein froh-Treiber-CMake-Projekt erfolgreich. Wenn ich jedoch froh-driver\CMakeLists.txt die folgenden Zeilen hinzufüge:

add_executable (hello_glad "HelloGlad.cpp")
target_link_libraries(hello_glad glad::glad)

dann bekomme ich folgenden Fehler:

CMake-Fehler in CMakeLists.txt:
Das importierte Ziel "glad::glad" enthält einen nicht vorhandenen Pfad

"C:/Users/me/include/glad"

in seinen INTERFACE_INCLUDE_DIRECTORIES. Mögliche Gründe sind:

  • Der Pfad wurde gelöscht, umbenannt oder an einen anderen Speicherort verschoben.

  • Ein Installations- oder Deinstallationsvorgang wurde nicht erfolgreich abgeschlossen.

  • Das Installationspaket war fehlerhaft und verweist auf Dateien, die es nicht tut
    zur Verfügung stellen.

Jede Hilfe wäre sehr dankbar!

glad1 question

Hilfreichster Kommentar

Hallo zusammen.

@tysonbrochu , haben Sie daran gedacht , das

Mein Vorschlag ist, es zu versuchen. Es kann das Problem lösen, das Sie haben (Sie lassen CMake alles für Sie erledigen). Außerdem können Sie andere Abhängigkeiten auf die gleiche vereinheitlichte Weise verwalten.

  1. Bearbeiten Sie Ihren Stamm CMakeLists.txt und fügen Sie die folgende Zeile hinzu:
    add_subdirectory(extern)
  2. Erstellen Sie ein Verzeichnis extern im Stammordner des Projekts.
  3. Erstellen Sie eine extern/CMakeLists.txt Datei mit folgendem Inhalt:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. Fügen Sie wie gewohnt glad als Abhängigkeit in einem Ihrer CMakeLists.txt :
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

Hoffe das hilft.

Alle 7 Kommentare

Vielen Dank für die ausführliche Beschreibung Ihres Problems - ich muss das prüfen und versuchen, dieses Problem zu reproduzieren.

@sfuller vielleicht könnt ihr mir helfen das zu untersuchen?

Danke für die schnelle Antwort!

Ich glaube, ich bin jetzt einer Lösung näher gekommen. Ich denke, anstatt msbuild auf der Ausgabe von froh cmake auszuführen, sollte ich cmake --build . --install ausführen. Das scheint zu versuchen, alles (gladConfig und gladTargets) in mein CMake-Verzeichnis zu installieren. Ich werde weiter nachforschen, aber es würde mich trotzdem interessieren, ob jemand mit einem ähnlichen Setup Erfolg hatte.

Hast du das herausgefunden? Tut mir leid, im Moment beschäftigt zu sein, ich werde versuchen, mir das Wochenende noch einmal anzusehen.

Kein Problem. Wir haben dies nicht bis zu einer praktikablen Lösung verfolgt und mussten uns anderen Dingen zuwenden. Im Moment werden wir also nur die vorgenerierten .h/.c-Dateien direkt in unseren Build integrieren, anstatt den CMake-Mechanismus von froh zu durchlaufen. Wenn wir in Zukunft wiederkommen, werde ich dieses Thema aktualisieren.

Danke nochmal für deine Hilfe.

Hallo zusammen.

@tysonbrochu , haben Sie daran gedacht , das

Mein Vorschlag ist, es zu versuchen. Es kann das Problem lösen, das Sie haben (Sie lassen CMake alles für Sie erledigen). Außerdem können Sie andere Abhängigkeiten auf die gleiche vereinheitlichte Weise verwalten.

  1. Bearbeiten Sie Ihren Stamm CMakeLists.txt und fügen Sie die folgende Zeile hinzu:
    add_subdirectory(extern)
  2. Erstellen Sie ein Verzeichnis extern im Stammordner des Projekts.
  3. Erstellen Sie eine extern/CMakeLists.txt Datei mit folgendem Inhalt:
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
# Multi-Language Vulkan/GL/GLES/EGL/GLX/WGL Loader-Generator based on
# the official specs. http://glad.dav1d.de/
FetchContent_Declare(
  extern_glad

  GIT_REPOSITORY https://github.com/Dav1dde/glad.git
  GIT_TAG        v0.1.27)

FetchContent_GetProperties(extern_glad)
if(NOT extern_glad_POPULATED)
  FetchContent_Populate(extern_glad)

  set(GLAD_INSTALL ON)
  add_subdirectory(
    ${extern_glad_SOURCE_DIR}
    ${extern_glad_BINARY_DIR}
    EXCLUDE_FROM_ALL)
endif()
  1. Fügen Sie wie gewohnt glad als Abhängigkeit in einem Ihrer CMakeLists.txt :
target_link_libraries(the_target_you_want_to_link_agains_glad
  PUBLIC
  glad

  PRIVATE
  ${CMAKE_DL_LIBS})

Hoffe das hilft.

Hallo, tut mir leid, dass ich zu spät zu diesem Gespräch komme.
In Ihrem Projekt verwenden Sie find_package(glad REQUIRED) .
Ich glaube nicht, dass dies funktioniert, es sei denn, Sie haben ein spezielles Modul zum Auffinden von GLAD. Um den CMake-Konfigurationspaketmechanismus zu verwenden, den Glad verwendet, versuchen Sie es stattdessen mit find_package(glad REQUIRED CONFIG)

Beachten Sie, dass Sie zuerst cmake --build . --install auf dem frohen Build ausführen müssen. Wenn CMake das GLAD-Ziel immer noch nicht finden kann, müssen Sie CMake möglicherweise mit -DCMAKE_PREFIX_PATH auf die installierten Dateien verweisen. Ausführlichere Informationen dazu finden Sie in der Dokumentation zu find_package: https://cmake.org/cmake/help/v3.12/command/find_package.html

Ich gehe davon aus, dass dies gelöst ist, wenn nicht, können Sie es erneut öffnen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

lazysquid picture lazysquid  ·  5Kommentare

MythreyaK picture MythreyaK  ·  9Kommentare

p-groarke picture p-groarke  ·  5Kommentare

incendor picture incendor  ·  8Kommentare

lethal-guitar picture lethal-guitar  ·  6Kommentare