使用 glew 1.13.0 和 CMake 3.4.0 构建 VS2015 x64 项目

Building a VS2015 x64 project using glew 1.13.0 and CMake 3.4.0

如何使用 glew 1.13.0 和 CMake 3.4.0 构建 VS2015 x64 项目?

我准备了一个最小的演示,可以在这里找到:https://bitbucket.org/Vertexwahn/cmakedemos/src/2fbbc02b2c0567319d7be070b34391b1ef35048d/GlewDemo/?at=default

CMakeLists.txt:

cmake_minimum_required ( VERSION 2.8)
project ( GlewDemo )

find_package(GLEW REQUIRED)

set ( SRCS main.cpp )

add_executable(GlewDemo ${SRCS})

target_link_libraries(GlewDemo glew32s)

我从这里下载了预构建的二进制文件:http://sourceforge.net/projects/glew/files/glew/1.13.0/glew-1.13.0-win32.zip/download

并设置GLEW_INCLUDE_DIR的路径为对应目录("C:\Users\no68koc\Downloads\glew-1.13.0\include")

但是 CMake 给我一些错误:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find GLEW (missing: GLEW_LIBRARY)
Call Stack (most recent call first):
  C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindGLEW.cmake:44 (find_package_handle_standard_args)
  CMakeLists.txt:4 (find_package)


Configuring incomplete, errors occurred!
See also "C:/build/vs2015/GlewDemo/CMakeFiles/CMakeOutput.log".

它如何正常工作?

CMake 无法找到您的 GLEW。因此你必须提示 CMake.

要么将 GLEW 包含到某个地方,CMake 将在其中查找组件。想到安装 GLEW。

或者您手动定义变量。您已经为 GLEW_INCLUDE_DIR 做到了。你也必须定义 GLEW_LIBRARY
它必须是名为 glew32、glew 或 glew32s 的库的路径。对于 Unices,它应该是 lib*.so 可能还有一些额外的版本号。对于 Windows,它应该是 *.dll 或 *.lib。

错误信息

Could NOT find GLEW (missing: GLEW_LIBRARY)

是由 FindXXX.cmake 脚本(通过 find_package(XXX) 调用)生成的标准消息,它无法设置(推断)一些 CMake 变量,因此 假定整个包找不到.

大多数 FindXXX.cmake 脚本描述(在评论中),哪些变量由脚本 为用户设置

但其中只有几个描述了,用户如何帮助脚本以防脚本根本找不到所需的包,或者如果用户希望脚本找到特定的包安装而不是默认的。

没有通用的方法来帮助 FindXXX.cmake 脚本,在大多数情况下,应该分析脚本的代码以了解变量,这会有所帮助。

在给定的情况下(使用 GLEW 包)分析 CMake 提供的 FindGLEW.cmake script reveals, that both find_path() call (which set GLEW_INCLUDE_DIR variable) and find_library() call (which set GLEW_LIBRARY variable) use no hints (HINT or PATH options) for search. But there are standard hints, which are used by both of this commands. One of these hints is ${CMAKE_PREFIX_PATH}/include directory for find_path and similar directory for find_library

所以你可以使用

list(APPEND CMAKE_PREFIX_PATH "C:\Users\no68koc\Downloads\glew-1.13.0")

提示 find_library() 和 find_path() 也在该目录下搜索。 或者,您可以在 GUI 中(例如在 Visual Studio 内)或通过命令行在 CMake 缓存中设置 CMAKE_PREFIX_PATH 变量:

cmake -DCMAKE_PREFIX_PATH:PATH=C:\Users\no68koc\Downloads\glew-1.13.0

(请注意,在 CMakeLists.txt 中使用 list(APPEND ...) 而不是 set(...) 不会覆盖变量,以防它也在缓存中设置)。


您可以使用另一个 3d 派对 FindGLEW.cmake 脚本

您可以将其下载到您的项目中(例如,cmake/FindGLEW.cmake)并发布

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)

告诉 find_package() 使用此脚本而不是默认脚本。

给定脚本使用

${GLEW_LOCATION}

目录(及其子目录)作为在 find_path()find_library() 中搜索的提示(在 PATH 命令的选项下)。所以你可以设置GLEW_LOCATION变量到安装目录:

set(GLEW_LOCATION "C:\Users\no68koc\Downloads\glew-1.13.0")

为了让事情顺利进行。或者(最好),可以在缓存中设置此变量。

此外,鉴于 FindGLEW.cmake 脚本使用

$ENV{GLEW_LOCATION}

目录作为提示。这意味着设置 GLEW_LOCATION 环境变量 也会有所帮助。