正如标题所说,我似乎无法使用 OpenGL 和 Glut 构建项目。
我得到 OpenGL 函数的未定义参考错误。
我试着做:
project(testas)
find_package(OpenGL)
find_package(GLUT)
add_executable(testas main.cpp)
但这不起作用。
有什么建议么?
原文由 Ren 发布,翻译遵循 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 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答798 阅读✓ 已解决
2 回答3.2k 阅读
find_package(OpenGL)
会为您找到包,但不会将包链接到目标。要链接到库,您可以使用
target_link_libraries(<target> <item>)
。另外,你还需要设置include directory
,让链接器知道去哪里找东西。这是通过include_directories
完成的。一个例子
CMakeLists.txt
会这样做看起来像这样:如果
OpenGL
是您的项目的必需品,您可以考虑在OpenGL_FOUND
find_package(OpenGL)
或使用REQUIRED
将停止cmake
如果没有找到OpenGL
。有关更多信息和更好的示例:
特别是
CMake wiki
和cmake and opengl
链接应该足以让您正常工作。