将GLEW与CMake链接

jum4pzuy  于 2023-02-23  发布在  其他
关注(0)|答案(6)|浏览(242)

如何使用CMake将GLEW链接到一个项目?
我们一直试图链接GLEW到我们的项目使用CMake至少3个小时没有任何成功,所以任何帮助都是接受的。
我使用的是CMake 3.1.0附带的FindGLEW. cmake

    • CMakeLists.文本文件**
find_package(GLEW REQUIRED)
if (GLEW_FOUND)
    include_directories($(GLEW_INCLUDE_DIRS))
endif()
    • 环境变量**

我正在使用MinGW w64编译源代码,我们成功地链接了GLFW和GLM,只需将include和libs复制到各自的文件夹中,但在对GLEW进行了相同的操作后,CMake仍然找不到它。
抱歉,我在提出问题时不够清楚,我会提供任何需要的额外资料。
编辑:我已经通过指定头文件在CMake Cache文件中的位置来链接头文件,尽管我得到了对像glewInit()这样的glew函数的未定义引用。

nue99wik

nue99wik1#

FindGLEW等典型的CMake脚本会定义一些变量来指定项目所需的路径和文件,如果脚本不能自动识别正确的路径(通常是因为安装位置不标准,这也没关系),那么这些变量就留给你来填写了。
在命令行CMake中,你可以使用-D标志来定义和设置一个给定变量的值,其他的CMake接口,比如CMake-gui或者IDE集成,可以用其他的方式来提供这个功能。
不管你怎么做,你也可以直接修改该高速缓存(CMakeCache.txt),看看CMake在那里使用了什么,或者干脆清空缓存,你必须重新运行CMake才能让它接受你的修改。
当涉及到链接的时候,你需要告诉CMake链接哪些库,使用link_libraries命令和自动化脚本给你的命令。

find_package(GLEW REQUIRED)
include_directories(${GLEW_INCLUDE_DIRS})
link_libraries(${GLEW_LIBRARIES})
kkbh8khc

kkbh8khc2#

其他答案显然也有效,但是cmake的基于目标的风格使其更加简单,因为GLEW find模块定义了导入的目标GLEW::GLEW

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

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

jm81lzqq

jm81lzqq3#

find_package(GLEW)的秘密是在FindGLEW.cmake文件中与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)

参考:

a1o7rhls

a1o7rhls4#

我很难在Mac上通过命令行将Glew链接到Cmake。这可能会有帮助,但我不确定:)我将一步一步地向你介绍我所做的事情。
我从web安装了Cmake源代码。
然后我进入终端的cmake文件夹并键入

./bootstrap && make && make install

(this将在我们的操作系统平台上安装cmake命令行工具)
我有一些练习文件。我想让cmake为我生成所有这些练习文件的xcode文件(ex.triangles.cpp,shader.cpp等),所以我在练习文件文件夹内做了一个目录。

$ 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。希望这对你有帮助。
快乐编码:)

o4hqfura

o4hqfura5#

最后我找到了一个简单而简短的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)
pgccezyw

pgccezyw6#

不管怎么说,在2023年,这对我来说是有效的,在macOS上,使用Homebrew安装GLEW,GLFW和CMake:

cmake_minimum_required(VERSION 3.10)
project(Project)
add_executable(Project main.cpp)
find_package(glfw3 REQUIRED)
find_package(GLEW REQUIRED)
target_link_libraries(Project glfw GLEW::glew)

相关问题