【问题标题】:Issue with compiling GLUT with CMake使用 CMake 编译 GLUT 的问题
【发布时间】:2022-01-08 11:12:03
【问题描述】:

我需要为一个项目使用 GLUT(我知道 GLUT 是一个古老的库)。当我运行项目时,我得到未定义的引用错误。这是我的 CMake 文件:

// Other code 
# GLUT
find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIR})
target_include_directories(${PROJECT_NAME} PRIVATE "${GLUT_DIR}/include")
if(GLUT_FOUND)
    message("-- GLUT found")
endif(GLUT_FOUND)

# OpenGL
find_package(OpenGL REQUIRED)
include_directories(${OpenGL_INCLUDE_DIRS})
link_directories(${OpenGL_LIBRARY_DIRS})
add_definitions(${OpenGL_DEFINITIONS})
if(OPENGL_FOUND)
    message("-- OPENGL found")
endif(OPENGL_FOUND)
target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES})

当我重新加载 CMake 项目时,我收到消息“--找到 GLUT”和“--找到 OPENGL”,因此查找库不是问题。 image of cmake messages 运行我的项目时,出现未定义的引用错误: image of the error message 我查看了有关 stackoverflow 的类似问题,但提供的解决方案不适用于我的情况。 这是我的文件结构: image of my file structure

有人知道可能的解决方案吗?

【问题讨论】:

  • 显示实际错误比描述你得到“错误”的事实有用1000倍。
  • add_library("glut" "${GLUT_DIR}/glut32.lib" "${GLUT_DIR}/glut.h") 似乎很奇怪。 find_package(GLUT REQUIRED) 应该为 GLUT 引入目标
  • 你是对的。我可能会添加它以寻找解决我的问题的方法。我担心这不是问题的根源。我仍然遇到同样的错误
  • 您可能希望在 CMakeLists.txt 的 target_link_libraries() 之前添加 MESSAGE(STATUS GLUT_LIBRARIES="${GLUT_LIBRARIES}") 并查看 cmake 配置期间的输出
  • @ids:Stack Overflow 不鼓励使用 images 来表示 text。相反,将文本(在您的情况下为错误消息)粘贴到问题帖子中。另见How to Ask

标签: c++ cmake glut


【解决方案1】:

始终通过导入的目标链接。 停止将包变量扩展为目录级命令。它又脆又乱,而且工作量更大。

这是一个链接到 GLUT + OpenGL 的基本示例:

cmake_minimum_required(VERSION 3.21)
project(example)

find_package(GLUT REQUIRED)
find_package(OpenGL REQUIRED)

add_executable(test main.cpp)
target_link_libraries(test PRIVATE GLUT::GLUT OpenGL::GL)

这种带有导入目标的find_package + target_link_libraries 模式是大多数 CMake-ready 库所需要的。

【讨论】:

    猜你喜欢
    • 2011-07-18
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2012-10-14
    • 1970-01-01
    相关资源
    最近更新 更多