将GLEW与CMake链接

Lor*_*olt 18 glew cmake dynamic-linking

如何将GLEW链接到CMake项目?

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

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

的CMakeLists.txt

find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()
Run Code Online (Sandbox Code Playgroud)

环境变量

在此输入图像描述 在此输入图像描述

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

对不起,如果我在制定问题时不够清楚.我将提供所需的任何其他信息.


编辑:我已经设法通过在CMake缓存文件中指定它们的位置链接头文件,虽然我得到未定义的glew函数的引用,如glewInit().

Alb*_*rtM 22

其他答案显然有效,但基于目标的 cmake 风格使它变得更加容易,因为 GLEW find 模块定义了导入的 target GLEW::GLEW。所有你需要的是:

find_package(GLEW REQUIRED)
target_link_libraries(YourTarget GLEW::GLEW)
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*y D 21

像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()
Run Code Online (Sandbox Code Playgroud)

  • `find_package`的选项*REQUIRED*告诉CMake如果找不到包,立即停止配置.因此在不需要之后检查`GLEW_FOUND`变量 - 只有在找到包时,CMake才会在`find_package()`之后处理行. (4认同)

max*_*int 9

秘密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)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

参考: