webentwicklung-frage-antwort-db.com.de

GLEW mit CMake verbinden

Wie können Sie GLEW mit einem CMake-Projekt verknüpfen?

Wir haben versucht, GLEW mit CMake für mindestens 3 Stunden ohne Erfolg mit unserem Projekt zu verknüpfen, sodass jegliche Hilfe akzeptiert wird. 

Ich verwende die mit CMake 3.1.0 gelieferte FindGLEW.cmake

CMakeLists.txt

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()

Umgebungsvariablen

enter image description hereenter image description here

Ich verwende MinGW w64 , um die Quellen zu kompilieren, und wir haben GLFW und GLM erfolgreich verknüpft, indem Sie die Includes und libs in ihre jeweiligen Ordner kopierten. Nachdem dies jedoch mit GLEW geschehen war, konnte CMake es immer noch nicht finden.

Entschuldigung, wenn ich bei der Formulierung der Frage nicht klar genug war. Ich werde zusätzliche Informationen angeben.


Edit: Ich habe es geschafft, die Header-Dateien durch Angabe ihres Speicherorts in der CMake-Cache-Datei zu verknüpfen, obwohl ich undefinierte Verweise auf glew-Funktionen wie glewInit() bekomme.

14
Lord Zsolt

Typische CMake-Skripts wie FindGLEW definieren Variablen, die die Pfade und Dateien angeben, die Ihr Projekt benötigt. Wenn das Skript die korrekten Pfade nicht automatisch ermitteln kann (normalerweise aufgrund eines nicht standardmäßigen Installationsverzeichnisses, was in Ordnung ist), überlässt es Ihnen diese Variablen, um sie auszufüllen.

Mit der Befehlszeile CMake verwenden Sie das Flag -D, um den Wert einer bestimmten Variablen zu definieren und festzulegen. Andere CMake-Schnittstellen, wie CMake-gui oder eine Integration mit IDE, bieten Ihnen diese Möglichkeit auf andere Weise.

Sie können jedoch auch den Cache direkt ändern (CMakeCache.txt) und sehen, was CMake dort verwendet, oder den Cache ganz löschen. Sie müssen CMake erneut ausführen, um die Änderungen zu übernehmen.

Wenn es um das Verknüpfen geht, müssen Sie CMake mitteilen, welche Libs verlinkt werden sollen. Verwenden Sie den Befehl link_libraries mit den Angaben des automatisierten Skripts.

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    link_libraries(${GLEW_LIBRARIES})
endif()
18
Jonny D

Das Geheimnis von find_package(GLEW) liegt in der Datei FindGLEW.cmake mit cmake install.

find_path(GLEW_INCLUDE_DIR GL/glew.h)
find_library(GLEW_LIBRARY NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64)

Die Befehle find_path und find_library finden Pfade in Standardsystempfaden. Wenn Sie möchten, dass sie in benutzerdefinierten Verzeichnissen nach Pfaden suchen, sollten Sie ihnen Folgendes mitteilen .. _. Beispiel:

set(CMAKE_PREFIX_PATH "d:/libs/glew-1.10.0")
set(CMAKE_LIBRARY_PATH "d:/libs/glew-1.10.0/lib/Release/Win32/")
find_package(GLEW REQUIRED)

Referenz:

8
maxint

Andere Antworten funktionieren offensichtlich, aber der zielbasierte Stil von cmake macht es noch einfacher, da das GLEW-Suchmodul das importierte Ziel GLEW::GLEW definiert. Alles was Sie brauchen ist:

find_package(GLEW REQUIRED)
target_link_libraries(YourTarget GLEW::GLEW)

YourTarget ist das Ziel, das Sie mit add_executable oder add_library erstellt haben. Include-Verzeichnisse müssen nicht explizit hinzugefügt werden, sie werden automatisch durch Verknüpfung der Ziele hinzugefügt.

1
AlbertM

Ich hatte Mühe, Glew mit Kommandozeile auf Mac zu verbinden. Das mag hilfreich sein, aber ich bin mir nicht sicher :) Ich werde Sie Schritt für Schritt durch das führen, was ich getan habe. 

Ich habe Cmake source aus dem web installiert.

Dann ging ich in den cmake Ordner im Terminal und tippte ein 

./bootstrap && make && make install 

(Dadurch werden cmake-Befehlszeilentools auf unserer Betriebssystemplattform installiert.)

Ich habe einige Übungsdateien. Ich möchte, dass cmake xcode-Dateien für alle Übungsdateien generiert (z. B. triangles.cpp, shader.cpp usw.). Also habe ich ein Verzeichnis im Übungsdateiordner erstellt.

$ mkdir xcode 
$ cd xcode
$ cmake -G "Xcode" ..

An diesem Punkt wird angenommen, dass Cmake alle Xcode-Dateien mit korrekten Bibliotheken installiert. Es gab jedoch einen Fehler: 

$ cmake -G "Xcode" ..
CMake Warning (dev) at CMakeLists.txt:3 (cmake_minimum_required):
Compatibility with CMake < 2.4 is not supported by CMake >= 3.0.
This warning is for project developers.  Use -Wno-dev to suppress it.

system name is: Darwin-14.1.0
system processor is: x86_64
-- Could NOT find GLEW (missing:  GLEW_INCLUDE_DIR GLEW_LIBRARY) 
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Using Cocoa for window creation
-- Using NSGL for context creation
-- Building GLFW only for the native architecture

CMake Error: The following variables are used in this project, but they are  set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
GLEW_LIBRARY
linked by target "TextureLoader" in directory /Users/Mydir/Desktop/Exercise/Exercise Files

-- Configuring incomplete, errors occurred!

Um sicherzugehen, dass ich GLEW und alle seine Bibliotheken korrekt installiert habe, habe ich ausgeführt 

$brew install glew 

Ja, ich habe glew bereits installiert, aber es wurde NICHT verlinkt. Siehe die Warnung unten: 

Warning: glew-1.12.0 already installed, it's just not linked

Dann habe ich die folgenden Befehle ausgeführt: 

$ brew unlink glew 
$ brew link glew

Und ich habe den Fehler behoben. Stellen Sie also sicher, dass Sie glew verlinkt haben. Hoffe das hilft. 

Glückliche Kodierung :)

1
Sdembla