Comme le titre l'indique, je n'arrive pas à construire le projet avec OpenGL et Glut.
J'obtiens des erreurs de référence non définies pour les fonctions OpenGL.
J'ai essayé de faire:
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
Mais ça ne marche pas.
Aucune suggestion?
find_package(OpenGL)
trouvera le package pour vous, mais il ne le relie pas à la cible.
Pour créer un lien vers une bibliothèque, vous pouvez utiliser target_link_libraries(<target> <item>)
. De plus, vous devez également définir le include directory
, Afin que l'éditeur de liens sache où chercher les choses. Cela se fait avec le include_directories
.
Un exemple CMakeLists.txt
Qui ferait cela ressemble à ceci:
cmake_minimum_required(VERSION 2.8)
project(testas)
add_executable(testas main.cpp)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS} ${GLUT_INCLUDE_DIRS} )
target_link_libraries(testas ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} )
Si OpenGL
est une nécessité pour votre projet, vous pouvez envisager de tester OpenGL_FOUND
Après la find_package(OpenGL)
ou d'utiliser REQUIRED
, ce qui arrêtera cmake
si OpenGL
est introuvable.
Pour plus d'informations et de meilleurs exemples:
En particulier, les liens CMake wiki
Et cmake and opengl
Devraient vous en donner assez pour que les choses fonctionnent.
Dans les versions récentes de CMake (3.10+), il existe une nouvelle façon d'utiliser OpenGL en utilisant ce que l'on appelle cible IMPORTÉE:
cmake_minimum_required(VERSION 3.10)
project(testas)
add_executable(testas main.cpp)
find_package(OpenGL REQUIRED COMPONENTS OpenGL)
find_package(GLUT REQUIRED)
add_dependencies(testas OpenGL::OpenGL)
include_directories(${GLUT_INCLUDE_DIRS} )
target_link_libraries(testas OpenGL::OpenGL ${GLUT_LIBRARY} )
Pour le moment, la seule différence pratique semble être sur Linux (où GLVND est utilisé si disponible), mais cette solution devrait probablement être plus évolutive, car CMake a plus d'informations sur vos intentions et d'autres outils analysant vos CMakeFiles comprendront mieux la arbre de dépendance.