如何使用glew 1.13.0和CMake 3.4.0构建VS2015 x64项目?
我准备了一个最小的演示,可以在这里找到:https://bitbucket.org/Vertexwahn/cmakedemos/src/2fbbc02b2c0567319d7be070b34391b1ef35048d/GlewDemo/?at=default
的CMakeLists.txt:
newString[0]
我从这里下载了预建的二进制文件: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_minimum_required ( VERSION 2.8)
project ( GlewDemo )
find_package(GLEW REQUIRED)
set ( SRCS main.cpp )
add_executable(GlewDemo ${SRCS})
target_link_libraries(GlewDemo glew32s)
它是如何正常工作的?
答案 0 :(得分:3)
错误消息
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
变量)和{{1} call(设置find_library()
变量)不使用提示(HINT或PATH选项)进行搜索。但是有两个标准提示,这两个命令都使用了这些提示。其中一个提示是find_path的GLEW_LIBRARY
目录和find_library的类似目录。
所以你可以使用
${CMAKE_PREFIX_PATH}/include
提示find_library()和find_path()也可以在此目录下搜索。
或者,您可以在GUI中(例如在Visual Studio内部)或通过命令行在CMake缓存中设置list(APPEND CMAKE_PREFIX_PATH "C:\Users\no68koc\Downloads\glew-1.13.0")
变量:
CMAKE_PREFIX_PATH
(请注意,在cmake -DCMAKE_PREFIX_PATH:PATH=C:\Users\no68koc\Downloads\glew-1.13.0
中使用list(APPEND ...)
代替set(...)
时,如果在缓存中设置了变量,则不会覆盖变量。
您可以使用其他三维FindGLEW.cmake脚本
您可以将其下载到您的项目中(例如,发送到CMakeLists.txt
)并发出
cmake/FindGLEW.cmake
告诉set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
使用此脚本而不是默认脚本。
给定脚本使用
find_package()
目录(及其子目录)作为在${GLEW_LOCATION}
和find_path()
中搜索的提示(在PATH命令的选项下)。因此,您可以将find_library()
变量设置为安装目录:
GLEW_LOCATION
让生活有效。或者(并且最好),可以在缓存中设置此变量。
另外,给定set(GLEW_LOCATION "C:\Users\no68koc\Downloads\glew-1.13.0")
脚本使用
FindGLEW.cmake
目录作为提示。这意味着设置$ENV{GLEW_LOCATION}
环境变量也会有所帮助。
答案 1 :(得分:1)
CMake找不到您的GLEW。因此,你必须暗示CMake。
要么将GLEW包含在CMake查找组件的某个地方。想到安装GLEW。
或者您手动定义变量。你已经为GLEW_INCLUDE_DIR
做了那个。您还必须定义GLEW_LIBRARY
它必须是名为glew32,glew或glew32s的库的路径。使用Unices时,它应该是lib * .so可能还有一些额外的版本号。对于Windows,它应该是* .dll或* .lib。