将GLEW与CMake链接

时间:2014-12-14 18:52:29

标签: cmake dynamic-linking glew

如何使用CMake将GLEW链接到项目?

我们一直在尝试使用CMake将GLEW链接到我们的项目至少3个小时而没有任何成功,因此可以接受任何帮助。

我正在使用CMake 3.1.0附带的FindGLEW.cmake

的CMakeLists.txt

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()

环境变量

enter image description here enter image description here

我正在使用 MinGW w64 来编译源代码,我们只是通过将包含和库复制到各自的文件夹来成功链接GLFW和GLM,但在对GLEW执行相同操作后,CMake仍然无法使用找不到。

很抱歉,如果我在制定问题时不够清楚。我将提供所需的任何其他信息。


编辑:我已经设法通过在CMake缓存文件中指定它们的位置来链接头文件,尽管我得到了对glewInit()等glew函数的未定义引用。

5 个答案:

答案 0 :(得分:20)

像FindGLEW这样的典型CMake脚本将定义指定项目所需路径和文件的变量。如果脚本无法自动识别正确的路径(通常是因为非标准安装位置,这很好),那么它会将这些变量留给您填写。

使用命令行CMake,使用-D标志来定义和设置给定变量的值。其他CMake接口,如CMake-gui或IDE集成,可以通过其他方式为您提供此功能。

但是你这样做,你也可以直接修改缓存(CMakeCache.txt)并查看CMake在那里使用的内容,或者只是完全清除缓存。您必须重新运行CMake才能获取更改。

当谈到链接时,就需要告诉CMake链接哪些库。使用link_libraries命令以及自动脚本为您提供的内容。

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories(${GLEW_INCLUDE_DIRS})
    link_libraries(${GLEW_LIBRARIES})
endif()

答案 1 :(得分:8)

find_package(GLEW)的秘密在于使用cmake install的FindGLEW.cmake文件中。

find_path(GLEW_INCLUDE_DIR GL/glew.h)
find_library(GLEW_LIBRARY NAMES GLEW glew32 glew glew32s PATH_SUFFIXES lib64)

find_pathfind_library命令在标准系统路径中查找路径。如果您希望它们在用户定义的目录中查找路径,您应该告诉它们。 例如:

set(CMAKE_PREFIX_PATH "d:/libs/glew-1.10.0")
set(CMAKE_LIBRARY_PATH "d:/libs/glew-1.10.0/lib/Release/Win32/")
find_package(GLEW REQUIRED)

<强>参考:

答案 2 :(得分:2)

其他答案显然也有效,但是基于目标的cmake样式使之更加容易,因为GLEW查找模块定义了导入的目标GLEW::GLEW。您只需要:

find_package(GLEW REQUIRED)
target_link_libraries(YourTarget GLEW::GLEW)

YourTarget是您使用add_executableadd_library创建的目标。无需显式添加包含目录,它们是通过链接目标自动添加的。

答案 3 :(得分:1)

我很难通过Mac上的命令行将glew链接到cmake。这可能会有所帮助,但我不确定:)我将逐步指导您完成的工作。

我从web安装了Cmake源代码。

然后我进入终端的cmake文件夹并输入

./bootstrap && make && make install 

(这将在我们的OS平台上安装cmake命令行工具)

我有一些锻炼文件。我希望cmake为我生成所有这些练习文件的xcode文件(例如triangles.cpp,shader.cpp等)所以我在exercise文件夹中创建了一个目录。

$ mkdir xcode 
$ cd xcode
$ cmake -G "Xcode" ..

此时,Cmake假设安装包含正确库的所有xcode文件。但是有一个错误:

$ cmake -G "Xcode" ..
CMake Warning (dev) at CMakeLists.txt:3 (cmake_minimum_required):
Compatibility with CMake < 2.4 is not supported by CMake >= 3.0.
This warning is for project developers.  Use -Wno-dev to suppress it.

system name is: Darwin-14.1.0
system processor is: x86_64
-- Could NOT find GLEW (missing:  GLEW_INCLUDE_DIR GLEW_LIBRARY) 
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Using Cocoa for window creation
-- Using NSGL for context creation
-- Building GLFW only for the native architecture

CMake Error: The following variables are used in this project, but they are  set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
GLEW_LIBRARY
linked by target "TextureLoader" in directory /Users/Mydir/Desktop/Exercise/Exercise Files

-- Configuring incomplete, errors occurred!

然后为了确保我已经正确安装了GLEW及其所有库,我运行了

$brew install glew 

是的,我已经安装了glew但它没有链接。请参阅下面的警告:

Warning: glew-1.12.0 already installed, it's just not linked

然后我运行了以下命令:

$ brew unlink glew 
$ brew link glew

我已经解决了这个错误。所以只要确保你已经链接了glew。希望这可以帮助。

快乐编码:)

答案 4 :(得分:0)

最后,我发现了一个简单且简短的CMakeLists,如果您已将所有内容都安装在默认路径中(openGL,glfw和glew)都可以使用

cmake_minimum_required(VERSION 3.3)
project(openGL_tutorial)
find_package(OpenGL REQUIRED)
if(NOT OPENGL_FOUND)
     message("ERROR: OpenGL not found")
endif(NOT OPENGL_FOUND)
set(GL_LIBRARY GL GLU X11)

add_executable(openGL_tutorial main.cpp)
target_link_libraries(openGL_tutorial glfw GLEW libGLEW.so libGLU.so libGL.so)