[解决]在UBUNTU中使用CMAKE来导入OPENGL和GLUT

问题描述:
在VScode中,写如下的CMakeLists.txt文件
在这里插入图片描述
然后编译CMake得到如下结果:

[build] /home/simula/Pro/testcmake/main.cpp:26:对‘glutInit’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:28:对‘glutInitDisplayMode’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:30:对‘glutInitWindowSize’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:32:对‘glutInitWindowPosition’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:34:对‘glutCreateWindow’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:38:对‘glutDisplayFunc’未定义的引用
[build] /home/simula/Pro/testcmake/main.cpp:40:对‘glutMainLoop’未定义的引用

截图如下:
在这里插入图片描述
仔细观察,猜测“未定义的引用”是因为没有识别到glut.h头文件导致。所以定位问题所在:CMakeLists写错了。

解决方法:

# seach
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)
# include    
include_directories(${OPENGL_INCLUDE_DIRS})
include_directories(${GLUT_INCLUDE_DIRS})
# link
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})

不但需要用固定的find_package()函数找到OpenGL还需要找到GLUT,这是因为GLUT不是OpenGL的标准内容。

此外找到路径之后,还需要用include_directories()把路径链接进来。

最后链接库。

之后问题解决。
截图如下:
在这里插入图片描述
网上其他的导入OpenGL和GLUT的方法基本上都是抄的stackoverflow的方法,这些方法要么老了,要么本来就是解决不了问题的,抄都不知道验证一下再发到网上。

附上我的完整的CMakeLists.txt
注意:这个cmakelists的结构顺序尽量不要变,否则出错

cmake_minimum_required(VERSION 3.0.0)
project(testcmake VERSION 0.1.0)

# seach the library
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED) 

include(CTest)
include_directories(${OPENGL_INCLUDE_DIRS})
include_directories(${GLUT_INCLUDE_DIRS})

enable_testing()

add_executable(testcmake main.cpp)

target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值