web-dev-qa-db-fra.com

Erreur de lien cible de la bibliothèque de liens Cmake

Salut, j'ai un problème avec Linkg Glfw et d'autres bibliothèques utilisant cmake. À partir de la ligne de commande, je compile comme ceci

g++ main.cpp -lGL -lGLU -lGLEW -lglfw

Mais je voulais utiliser cmake pour la compilation. J'ai essayé d'utiliser target_linkg_libraries mais cela produit une erreur

Erreur CMake sur CMakeLists.txt: 18 (target_link_libraries): Impossible de spécifier des bibliothèques de liens pour la cible "GL" qui n'est pas créée par ce
projet.

J'ai essayé de le faire en utilisant des définitions d'ajout. Je ne vois pas d'erreur mais cela ne lie pas les bibliothèques.

cmake_minimum_required (VERSION 2.6)
project (test)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

ADD_DEFINITIONS(
    -lGL
    -lGLU
    -lGLEW
    -lglfw
)

add_executable(test.out
    main.cpp
)

target_link_libraries(GL GLU GLEW glfw)
24
Luffy

La syntaxe de target_link_libraries est:

target_link_libraries(your_executable_name libraries_list)

Et vous n'avez pas besoin d'ajouter add_definition instructions (target_link_libraries ajoute cette option)

Il existe également des variables utiles fournies par les packages OpenGL et GLEW.

Votre CMakeLists.txt devrait ressembler à:

cmake_minimum_required (VERSION 2.6)
project (test)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

include_directories(${OPENGL_INCLUDE_DIR} ${GLEW_INCLUDE_DIRS})

add_executable(test
    main.cpp
)

target_link_libraries(test ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES})

Un détail important à garder à l'esprit est de placer le target_link_librariesaprès le add_executable (ou add_library) ligne.

54
Zifre