今天更新系统之前,一切都很顺利。 我的 CMakeList.txt 如下所示:
cmake_minimum_required(VERSION 2.7)
project(p3)
# Set the C++ Standard
set(CMAKE_CXX_STANDARD 17)
# Set the compiling flags
set(CMAKE_CXX_FLAGS "-Werror -pedantic -Wall -Wextra -Wvla")
# Find the OpenGL library
find_package(OpenGL REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
# Find the GLUT library
find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIR})
# Build
add_executable(p3 ...)
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} m)
但是更新之后就出错了! 我编译的时候有很多错误: (我用freeglut)
undefined reference to `glutInit'
ndefined reference to `glutInitWindowSize'
undefined reference to `glutInitWindowPosition'
undefined reference to `glutInitDisplayMode'
undefined reference to `glutCreateWindow'
undefined reference to `glutDisplayFunc'
undefined reference to `glutIdleFunc'
undefined reference to `glutMainLoop'
cmake 似乎无法链接 glut 库。
但其他函数如glVertex2f 则没问题。
并且使用g++
编译也可以。
现在我必须将我的 CMakeList 更改为:
// ...
target_link_libraries(p3 ${GLUT_LIBRARY} ${OPENGL_LIBRARY} glut m)
添加 glut
后,它再次起作用。
为什么会出现这种情况呢?
我该如何修复它?
有用信息:
cmake version 3.22.1
最佳答案
当使用 find_package
查找某个包时,请查阅其文档以了解其定义的变量或目标。 FindGLUT.cmake 的文档告诉脚本定义了变量 GLUT_LIBRARIES
,因此要与 GLUT 链接,您需要使用该变量,而不是 GLUT_LIBRARY
之一。
如果不确定您是否使用了正确的变量,则打印其内容。例如。与
message("GLUT_LIBRARY: ${GLUT_LIBRARY}")
在大多数情况下,变量的空内容意味着您使用错误的变量。
关于c++ - 系统更新后Cmake无法链接glut库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70314595/