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

我得到OpenGL函数的未定义引用错误.

我试着做:

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

但这不管用.

有什么建议吗?

推荐答案

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是您的项目的必要条件,您可以考虑在find_package(OpenGL)之后使用测试OpenGL_FOUND或使用REQUIRED,如果没有找到OpenGL,则将停止cmake.

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

特别是,CMake wikicmake and opengl链接应该为你提供足够的信息,让你的工作顺利进行.

Linux相关问答推荐

创建守护进程时打开0,1,2描述符

仅查找并保留有效邮箱并删除无效记录,AWK

如何更改文件的上次访问/修改/更改日期?

在 bash 中解析变量

nohup 是否可以跨管道工作?

tmux:挂起不加载,不响应任何选项命令

如何在初始化脚本中以特定用户身份运行命令?

使用 awk 或 sed 删除特定字符

为什么在 Linux 中使用 select

如何将整个文件夹从 Amazon EC2 Linux 实例复制到本地 Linux 机器?

更改核心转储的位置

将 bash 脚本添加到路径

php.ini 更改,但在 Ubuntu 上无效

如何分析内存使用情况?

如何对 /dev/random 或 /dev/urandom 进行 base64 编码?

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

ngrok 如何在防火墙后工作?

System.currentTimeMillis 是否总是返回一个值 >= 以前的调用?

如何在 UNIX 中将字符串转换为整数

学习内核编程