web-dev-qa-db-fra.com

Relier GLEW à CMake

Comment pouvez-vous associer GLEW à un projet avec CMake?

Nous essayons de relier GLEW à notre projet en utilisant CMake depuis au moins 3 heures sans aucun succès pour que toute aide soit acceptée. 

J'utilise FindGLEW.cmake fourni avec CMake 3.1.0

CMakeLists.txt

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

Variables d'environnement

enter image description hereenter image description here

J'utilise MinGW w64 pour compiler les sources et nous avons lié avec succès GLFW et GLM en copiant simplement les éléments includes et les bibliothèques dans leurs dossiers respectifs, mais après avoir procédé de même avec GLEW, CMake ne pouvait toujours pas le trouver.

Désolé si je n'ai pas été assez clair lors de la formulation de la question. Je fournirai toute information supplémentaire requise.


Edit: J'ai réussi à lier les fichiers d'en-tête en spécifiant leur emplacement dans le fichier CMake Cache, bien que j'obtienne une référence non définie aux fonctions glew telles que glewInit().

14
Lord Zsolt

Les scripts CMake typiques tels que FindGLEW définiront des variables qui spécifient les chemins et les fichiers nécessaires à votre projet. Si le script ne peut pas identifier automatiquement les chemins corrects (généralement à cause d'un emplacement d'installation non standard, ce qui est correct), il vous laisse alors les variables à remplir.

Avec la ligne de commande CMake, vous utilisez l’indicateur -D pour définir et définir la valeur d’une variable donnée. D'autres interfaces CMake, telles que CMake-gui ou une intégration IDE, vous donnent cette possibilité d'une autre manière.

Quoi que vous fassiez, vous pouvez également modifier le cache directement (CMakeCache.txt) et voir ce que CMake utilise ici ou tout simplement effacer le cache. Vous devrez réexécuter CMake pour qu'il prenne en compte vos modifications.

En ce qui concerne la liaison, vous devez indiquer à CMake quelles bibliothèques lier. Utilisez la commande link_libraries avec ce que le script automatisé vous donne.

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

Le secret de find_package(GLEW) se trouve dans le fichier FindGLEW.cmake avec l’installation de cmake.

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

Les commandes find_path et find_library permettent de rechercher des chemins dans des chemins système standard. Si vous souhaitez qu'ils trouvent des chemins dans des répertoires définis par l'utilisateur, vous devez leur indiquer . Par exemple:

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)

Référence:

8
maxint

Il est évident que d’autres réponses fonctionnent, mais le style de cmake basé sur la cible facilite encore plus les choses puisque le module de recherche GLEW définit le GLEW::GLEW cible importé. Tout ce dont tu as besoin c'est:

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

YourTarget est la cible que vous avez créée avec add_executable ou add_library. Nul besoin d'ajouter explicitement les répertoires d'inclusion, ils sont ajoutés automatiquement en liant les cibles.

1
AlbertM

Je luttais fort pour relier glew à cmake via la ligne de commande sur mac. Cela pourrait être utile mais je ne suis pas sûr :) Je vais vous expliquer pas à pas ce que j'ai fait. 

J'ai installé la source Cmake depuis le web .

Ensuite, je suis entré dans le dossier cmake du terminal et ai tapé 

./bootstrap && make && make install 

(cela installera les outils de ligne de commande cmake sur notre plate-forme OS)

J'ai des dossiers d'exercices. Je veux que cmake génère des fichiers xcode pour moi pour tous ces fichiers d’exercices (ex. Triangles.cpp, shader.cpp, etc.). J’ai donc créé un répertoire dans le dossier des fichiers d’exercices.

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

À ce stade, Cmake suppose d'installer tous les fichiers xcode contenant les bibliothèques correctes. Mais il y avait une erreur: 

$ 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!

Ensuite, pour être sûr d’avoir correctement installé GLEW et toutes ses bibliothèques, j’ai exécuté 

$brew install glew 

Oui, j'ai déjà installé glew mais ce n'était pas lié. Voir l'avertissement ci-dessous: 

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

Puis j'ai lancé les commandes suivantes: 

$ brew unlink glew 
$ brew link glew

Et j'ai résolu l'erreur. Assurez-vous simplement que vous avez lié glew. J'espère que cela t'aides. 

Bonne codage :)

1
Sdembla