Ren*_*Ren 36 linux opengl cmake
正如标题所说,我似乎无法使用OpenGL和Glut构建项目.
我得到OpenGL函数的Undefined引用错误.
我试过做:
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
有什么建议?
sim*_*ont 81
find_package(OpenGL) 将为您找到包,但它不会将包链接到目标.
要链接到库,您可以使用target_link_libraries(<target> <item>).此外,您还需要设置include directory,以便链接器知道在哪里查找内容.这是通过include_directories.
CMakeLists.txt这样做的一个例子看起来像这样:
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} )
Run Code Online (Sandbox Code Playgroud)
如果OpenGL您的项目是必需的,您可以考虑OpenGL_FOUND在find_package(OpenGL)使用之后进行测试REQUIRED,cmake如果OpenGL找不到则停止测试.
有关更多信息和更好的示例:
特别是,CMake wiki和cmake and opengl链接应该足以让你工作.
在最新版本的CMake(3.10+)中,有一种使用所谓的IMPORTED目标来使用OpenGL的新方法:
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} )
Run Code Online (Sandbox Code Playgroud)
目前,唯一的实际区别似乎是在Linux上(如果可用,则使用GLVND),但是大概此解决方案应更具前瞻性,因为CMake提供了有关您的意图的更多信息,并且其他解析CMakeFiles的工具将更好地理解依赖树。
截至最近,您可以使用GLUT::GLUT:
cmake_minimum_required(VERSION 2.8)
project(testas)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} OpenGL::GL GLUT::GLUT)
Run Code Online (Sandbox Code Playgroud)