tutorial for español ejemplos cubo beginners linux opengl cmake

linux - for - opengl tutorial español



¿Cómo compilar el proyecto GLUT+OpenGL con CMake y Kdevelop en Linux? (2)

Como dicen los títulos, parece que no puedo construir el proyecto con OpenGL y Glut.

Obtengo errores de referencia no definidos para las funciones de OpenGL.

Intenté hacer:

project(testas) find_package(OpenGL) find_package(GLUT) add_executable(testas main.cpp)

Pero eso no funciona.

¿Alguna sugerencia?


Utilizo estos dos archivos de cmake para construir mis proyectos de OpenGL, y todos funcionan bien.

Solo pruebo estos dos archivos cmake bajo Deepin Linux. Deepin Linux es un sistema Linux desarrollado en China como Ubuntu o Debian.

Primero, el principal CMakeLists.txt

cmake_minimum_required(VERSION 3.1.0) project(project_name) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/") find_package(OpenGL REQUIRED) find_package(FREEGLUT REQUIRED) find_package(GLEW REQUIRED) if(NOT ${OPENGL_FOUND}) message("OPENGL not found") endif() include_directories( ${PROJECT_SOURCE_DIR} ${FREEGLUT_INCLUDE_DIR} ${GLEW_INCLUDE_DIR} ${OPENGL_INCLUDE_DIR} ) message(${OPENGL_INCLUDE_DIR}) add_executable(${PROJECT_NAME} ${PROJECT_SOURCE_DIR}/filename.cpp) target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARY} ${FREEGLUT_LIBRARY} ${GLEW_LIBRARY} )

En segundo lugar, encuentre el archivo GLUT cmake en el directorio CMakeModules

# Try to find the FREEGLUT library # # FREEGLUT_INCLUDE_DIR # FREEGLUT_LIBRARY # FREEGLUT_FOUND FIND_PATH( FREEGLUT_INCLUDE_DIR GL/freeglut.h GL/gl.h GL/glu.h GL/glew.h ${CMAKE_INCLUDE_PATH} $ENV{include} ${OPENGL_INCLUDE_DIR} /usr/include /usr/local/include ) SET(STORE_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK}) SET(CMAKE_FIND_FRAMEWORK NEVER) FIND_LIBRARY( FREEGLUT_LIBRARY NAMES freeglut_static freeglut glut GL PATH /opt/local/lib ${CMAKE_LIBRARY_PATH} $ENV{lib} /usr/lib /usr/local/lib ) SET(CMAKE_FIND_FRAMEWORK ${STORE_CMAKE_FIND_FRAMEWORK}) IF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY) SET(FREEGLUT_FOUND TRUE) ENDIF (FREEGLUT_INCLUDE_DIR AND FREEGLUT_LIBRARY) IF (FREEGLUT_FOUND) IF (NOT FREEGLUT_FIND_QUIETLY) MESSAGE(STATUS "Found FREEGLUT: ${FREEGLUT_LIBRARY}") ENDIF (NOT FREEGLUT_FIND_QUIETLY) ELSE (FREEGLUT_FOUND) IF (FREEGLUT_FIND_REQUIRED) MESSAGE(FATAL_ERROR "Could not find FREEGLUT") ENDIF (FREEGLUT_FIND_REQUIRED) ENDIF (FREEGLUT_FOUND)


find_package(OpenGL) encontrará el paquete para usted, pero no vincula el paquete al destino.

Para vincular a una biblioteca, puede usar target_link_libraries(<target> <item>) . Además, también necesita establecer el include directory para que el vinculador sepa dónde buscar las cosas. Esto se hace con los include_directories .

Un ejemplo de CMakeLists.txt que haría esto se parece a esto:

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 es una necesidad para su proyecto, puede considerar probar OpenGL_FOUND después de find_package(OpenGL) o usar REQUIRED , lo que detendrá cmake si no se encuentra OpenGL .

Para obtener más información y mejores ejemplos:

En particular, los enlaces CMake wiki y cmake and opengl CMake wiki deberían darte lo suficiente para que las cosas funcionen.