You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake报错:手动定义后GLEW_LIBRARY仍为NOTFOUND求助

解决CMake构建GLEW依赖时的GLEW_LIBRARY NOTFOUND错误

问题根源

从你的CMake输出可以看到:

Found GLEW: /usr/local/lib/cmake/glew/glew-config.cmake

这说明CMake采用了config模式加载GLEW,而非传统的FindGLEW.cmake模块。在config模式下,GLEW导出的是现代CMake目标GLEW::GLEW,而非旧版的GLEW_LIBRARIES/GLEW_LIBRARY变量。你的CMakeLists.txt混用了旧版变量和新版config模式,导致CMake找不到GLEW_LIBRARY变量。

解决步骤

  1. 修改CMakeLists.txt,使用现代CMake目标链接
    移除所有手动查找GLEW库的代码,替换链接方式:
    将原代码中的:

    find_package(GLEW REQUIRED)
    include_directories(${GLEW_INCLUDE_DIRS})
    ...
    target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES})
    

    替换为:

    find_package(GLEW REQUIRED)
    ...
    target_link_libraries(${PROJECT_NAME} ${OPENGL_LIBRARIES} GLEW::GLEW)
    

    同时可以删除include_directories(${GLEW_INCLUDE_DIRS}),因为GLEW::GLEW目标已经自动包含了头文件路径,无需手动添加。

  2. 彻底清理CMake缓存
    删除项目目录下的缓存文件和构建目录,避免旧变量干扰:

    rm -rf CMakeCache.txt CMakeFiles/
    
  3. 重新运行CMake

    cmake .
    

为什么之前的方法无效?

  • 手动修改FindGLEW.cmake或设置GLEW_LIBRARY变量无效:因为CMake已经优先使用了glew-config.cmake,不会读取旧模块的变量,反而手动操作可能引入冲突。
  • 显式传递-DGLEW_LIBRARY无效:config模式下CMake优先使用导出的GLEW::GLEW目标,忽略手动设置的变量。
  • 源码安装的OpenGL不影响:CMake已经正确识别了OpenGL,问题仅出在GLEW的链接方式上。

修改后的完整CMakeLists.txt示例

cmake_minimum_required (VERSION 3.15)

project ("ProjectName" LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)

file(GLOB sources CONFIGURE_DEPENDS src/*.cpp src/*.hpp src/*.h)
add_executable(${PROJECT_NAME} ${sources})

# 使用现代目标链接,自动处理头文件和库路径
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENGL_LIBRARIES} GLEW::GLEW)

file(COPY ${RESOURCE_FILES} DESTINATION ${CMAKE_BINARY_DIR}/Resources)

内容的提问来源于stack exchange,提问作者Borage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 06:16:08