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 FehlerVerstrichene 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!
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.
CMakeLists.txt
und fügen Sie die folgende Zeile hinzu:add_subdirectory(extern)
extern
im Stammordner des Projekts.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()
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.
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.
CMakeLists.txt
und fügen Sie die folgende Zeile hinzu:add_subdirectory(extern)
extern
im Stammordner des Projekts.extern/CMakeLists.txt
Datei mit folgendem Inhalt:glad
als Abhängigkeit in einem IhrerCMakeLists.txt
:Hoffe das hilft.