如何用linux中的CMake和Kdevelop编译GLUT + OpenGL项目?

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_FOUNDfind_package(OpenGL)使用之后进行测试REQUIRED,cmake如果OpenGL找不到则停止测试.

有关更多信息和更好的示例:

特别是,CMake wikicmake and opengl链接应该足以让你工作.

  • 您可能想要更新您的答案以使用导入的目标,例如 `target_link_libraries(testas PRIVATE OpenGL::OpenGL GLUT::GLUT)`。然后你真的不需要 `include_directories()` 的东西。cmake_minimum 也应该更新,但我真的不记得什么是最小最小值。我猜那是 3.0,3.6 你肯定是安全的。 (2认同)

min*_*xew 7

在最新版本的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_LIBRARIES}”(复数) (2认同)

Kad*_*a B 5

截至最近,您可以使用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)