如何在 linux 中使用 CMake 和 Kdevelop 编译 GLUT OpenGL 项目?

新手上路,请多包涵

正如标题所说,我似乎无法使用 OpenGL 和 Glut 构建项目。

我得到 OpenGL 函数的未定义参考错误。

我试着做:

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

但这不起作用。

有什么建议么?

原文由 Ren 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 663
2 个回答

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} )

如果 OpenGL 是您的项目的必需品,您可以考虑在 OpenGL_FOUND find_package(OpenGL) 或使用 REQUIRED 将停止 cmake 如果没有找到 OpenGL

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

特别是 CMake wikicmake and opengl 链接应该足以让您正常工作。

原文由 simont 发布,翻译遵循 CC BY-SA 4.0 许可协议

在最新版本的 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} )

目前,唯一实际的区别似乎是在 Linux 上(如果可用,则使用 GLVND),但大概这个解决方案应该更面向未来,因为 CMake 有更多关于您的意图的信息,并且解析您的 CMakeFiles 的其他工具将更好地理解依赖树。

原文由 minexew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题