Vinculación de GLEW con CMake
dynamic-linking (3)
Los scripts típicos de CMake como FindGLEW definirán variables que especifiquen las rutas y los archivos que su proyecto necesita. Si la secuencia de comandos no puede identificar automáticamente las rutas correctas (generalmente debido a una ubicación de instalación no estándar, lo que está bien), entonces deja estas variables para que usted complete.
Con la línea de comando CMake, usa el distintivo -D para definir y establecer el valor de una variable determinada. Otras interfaces de CMake, como CMake-gui o una integración IDE, le brindan esta capacidad de otra manera.
Independientemente de cómo lo hagas, también puedes modificar el caché directamente (CMakeCache.txt) y ver qué está usando CMake allí o simplemente borrar el caché por completo. Tendrás que volver a ejecutar CMake para que recoja tus cambios.
Cuando se trata de vincular, es cuando necesita decirle a CMake qué librerías vincular. Use el comando link_libraries
con lo que el script automatizado le brinda.
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
include_directories(${GLEW_INCLUDE_DIRS})
link_libraries(${GLEW_LIBRARIES})
endif()
¿Cómo se puede vincular GLEW a un proyecto con CMake?
Hemos intentado vincular GLEW a nuestro proyecto utilizando CMake durante al menos 3 horas sin ningún éxito, por lo que se acepta cualquier ayuda.
Estoy usando el FindGLEW.cmake que viene con CMake 3.1.0
CMakeLists.txt
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
include_directories($(GLEW_INCLUDE_DIRS))
endif()
Variables de entorno
Estoy usando MinGW w64 para compilar las fuentes y hemos vinculado GLFW y GLM con éxito simplemente copiando los includes y libs en sus respectivas carpetas, pero después de hacer lo mismo con GLEW, CMake todavía no pudo encontrarlo.
Lo siento si no fui lo suficientemente claro al formular la pregunta. Proporcionaré cualquier información adicional requerida.
Editar: he logrado vincular los archivos de encabezado especificando su ubicación en el archivo de caché CMake, aunque obtengo una referencia no definida para las funciones glewInit()
como glewInit()
.
El secreto de find_package(GLEW)
está en el archivo FindGLEW.cmake con cmake install.
find_path(GLEW_INCLUDE_DIR GL/glew.h)
find_library(GLEW_LIBRARY NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64)
Los comandos find_path
y find_library
encuentran rutas en rutas de sistema estándar. Si desea que encuentren rutas en directorios definidos por el usuario, debe informarles. Por ejemplo:
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)
Referencia:
Estaba luchando duro para vincular glew a cmake a través de la línea de comando en mac. Esto podría ser útil, pero no estoy seguro :) Le explicaré paso a paso lo que hice.
Instalé la fuente de Cmake desde la web .
Luego entré en la carpeta cmake en la terminal y escribí
./bootstrap && make && make install
(Esto instalará las herramientas de línea de comandos de cmake en nuestra plataforma de sistema operativo)
Tengo algunos archivos de ejercicios. Quiero que cmake genere archivos xcode para todos los archivos de ejercicio (por ejemplo, triangles.cpp, shader.cpp, etc.). Así que hice un directorio dentro de la carpeta de archivos de ejercicios.
$ mkdir xcode
$ cd xcode
$ cmake -G "Xcode" ..
En este punto, Cmake supone instalar todos los archivos xcode que incluyen bibliotecas correctas. Pero hubo un error:
$ 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!
Luego, para asegurarme de haber instalado correctamente GLEW y todas sus bibliotecas, ejecuté
$brew install glew
Sí, ya instalé glew pero NO estaba vinculado. Vea la advertencia a continuación:
Warning: glew-1.12.0 already installed, it''s just not linked
Luego ejecuté los siguientes comandos:
$ brew unlink glew
$ brew link glew
Y he resuelto el error. Así que solo asegúrate de haber enlazado glew. Espero que esto ayude.
Happy Coding :)