CMake 找不到 GLEW
Posted
技术标签:
【中文标题】CMake 找不到 GLEW【英文标题】:CMake can't find GLEW 【发布时间】:2016-10-26 20:27:20 【问题描述】:我已阅读此 [1],但在我的情况下,CMake 说它找不到 glew。
我在 Windows 上,我的 CMake 模块文件夹中有一个 FindGLEW.cmake 文件,大概是在我安装 CMake-3.6 时放在那里的。我在 sourceforge 上找到了 GLEW 并下载了适用于 Windows 的 zip 文件。我解压并安装在 C:\Program Files\glew 中。当我创建了自己的库并使用 CMake 构建和安装它们时,这是它们的默认安装位置,所以我很有信心我在这里没问题。
我的 CMakeLists.txt 中的 sn-p 是:
find_package(GLEW REQUIRED)
include_directories($GLEW_INCLUDE_DIRS)
link_libraries($GLEW_LIBRARIES)
来自 CMake 的实际错误消息是:
CMake Error at C:/Program Files/CMake/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find GLEW (missing: GLEW_INCLUDE_DIR GLEW_LIBRARY)
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.6/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
C:/Program Files/CMake/share/cmake-3.6/Modules/FindGLEW.cmake:44 (find_package_handle_standard_args)
source/CMakeLists.txt:5 (find_package)
FindGLEW.cmake 是否可能损坏?我查看了其他几个 FindXXXXXX.cmake 文件,它们就像雪花一样,每一个都非常独特。所以我很难肯定地说它遵循惯例。
[1]Linking GLEW with CMake
【问题讨论】:
【参考方案1】:查看sources,包正在相对路径中寻找 GLEW。这些相对路径使用不同的前缀进行搜索,包括变量CMAKE_PREFIX_PATH
的内容:
<prefix>/include
代表find_path
,用于查找包含目录。
<prefix>/lib
代表find_library
,用于查找库。
假设C:/Program Files/glew/include
和C:/Program Files/glew/lib
存在,请将C:/Program Files/glew
添加到您的CMAKE_PREFIX_PATH
变量中。比如:
list(APPEND CMAKE_PREFIX_PATH "C:/Program Files/glew")
find_package(GLEW REQUIRED)
注意以下几行:
include_directories($GLEW_INCLUDE_DIRS)
link_libraries($GLEW_LIBRARIES)
可以使用 imported target Glew::Glew
删除:
add_executable(foo ...)
target_link_libraries(foo Glew::Glew)
【讨论】:
感谢您添加。除了您发布的内容之外,这是我学到的内容。 find_package 不会递归到它检查的普通文件夹之外的子文件夹。就我而言,我将 CMAKE_PREFIX_PATH 编辑为 C:\Program Files\glew。这是需要的。但这仅允许 CMake 分别检查 CMAKE_PREFIX_PATH 和名为 'lib' 和 'include' 的子文件夹中的 .lib 文件和 .h 文件。所需的glew32s.lib 文件埋在C:\Program Files\glew\lib\Release\x64\glew32s.lib 中。在我在 lib 文件夹中复制了那个 .lib 文件后,这个包就被找到了。 再补充一点:如果我使用 CMake 从源代码构建 glew,我相信它知道如何安排生成的包以便更容易找到它。我认为我的麻烦更多是由 sourceforge 设置的文件夹结构或将我下载的 zip 文件放在一起以获得 glew 的预编译版本的结果。以上是关于CMake 找不到 GLEW的主要内容,如果未能解决你的问题,请参考以下文章