【问题标题】: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 项目
【发布时间】:2015-11-17 21:39:39
【问题描述】:

如何使用 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


    【解决方案1】:

    错误信息

    Could NOT find GLEW (missing: GLEW_LIBRARY)
    

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

    大部分 FindXXX.cmake 脚本都描述了(在评论中),哪些变量由脚本为用户设置。

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

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

    在给定的情况下(使用GLEW 包)分析CMake 提供的FindGLEW.cmake 脚本显示,find_path() 调用(设置GLEW_INCLUDE_DIR 变量)和find_library() 调用(设置GLEW_LIBRARY 变量) 不使用任何提示(HINT 或 PATH 选项)进行搜索。但是有标准提示,这两个命令都使用了这些提示。这些提示之一是${CMAKE_PREFIX_PATH}/include 目录find_path 和类似目录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 环境变量也会有所帮助。

    【讨论】:

      【解决方案2】:

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

      将 GLEW 包含到 CMake 查找组件的某个位置。想到安装 GLEW。

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

      【讨论】:

      • 是否可以只设置 glew 的“根”目录(例如“C:\Users\no68koc\Downloads\glew-1.13.0”) - 其他一切都自动运行?看来CMake提供的FindGlew.cmake文件用起来很麻烦。也许正因为如此,一些人开始编写自己的 FindGlew.cmake 文件,例如:github.com/tlorach/OpenGLText/blob/master/cmake/FindGLEW.cmake
      • 不,不是。我刚刚检查了 FindGLEW.cmake 的源代码。可能有人可以改进 CMake 提供的测试。但是你链接的那个看起来也坏了。为什么要将 FOUND_GLEW 标记为高级?
      • 我猜没有人再维护这个模块了。打开错误报告。
      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 2018-12-23
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多