如何使用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()
环境变量
我正在使用 MinGW w64 来编译源代码,我们只是通过将包含和库复制到各自的文件夹来成功链接GLFW和GLM,但在对GLEW执行相同操作后,CMake仍然无法使用找不到。
很抱歉,如果我在制定问题时不够清楚。我将提供所需的任何其他信息。
编辑:我已经设法通过在CMake缓存文件中指定它们的位置来链接头文件,尽管我得到了对glewInit()
等glew函数的未定义引用。
答案 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_path
和find_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_executable
或add_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)