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变量。
解决步骤
修改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目标已经自动包含了头文件路径,无需手动添加。彻底清理CMake缓存
删除项目目录下的缓存文件和构建目录,避免旧变量干扰:rm -rf CMakeCache.txt CMakeFiles/重新运行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
相关产品推荐
相关产品推荐

