将 GLEW 添加到项目 (CMake)

Ale*_*Ica 5 c++ windows opengl glew cmake

我想将 glfw 和 glew 链接到我的图形编程项目。

添加 glfw 非常简单,我按照他们网站上的说明进行操作。使用 glfw 创建一个窗口效果很好。

但是,我看不出我的 CMakeLists.txt 添加 GLEW 有什么问题。程序给出错误:“GL/glew.h:没有这样的文件或目录”。

我的 CMakeLists.txt:

cmake_minimum_required( VERSION 3.5 )

project(Starting)

find_package( OpenGL REQUIRED )

set( GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE )
set( GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE )
set( GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE )

add_subdirectory( ${PROJECT_SOURCE_DIR}/GLEW/build/cmake )
add_subdirectory( ${PROJECT_SOURCE_DIR}/GLFW )

add_executable( Starting ${PROJECT_SOURCE_DIR}/src/main.cxx )

target_link_libraries( Starting glew32s glfw )
Run Code Online (Sandbox Code Playgroud)

我试过给它命名 GLEW、glew、glew32,但没有任何改变。该库从这里下载:https : //github.com/Perlmint/glew-cmake

如果它有任何重要性,这是我用来运行 CMakeLists.txt 的批处理文件(位于我的项目源目录中的构建文件夹中):

@echo off

cmake -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Debug ..

make all
Run Code Online (Sandbox Code Playgroud)

在 github 上查看 OpenGL 项目并没有帮助,因为几乎所有项目都在使用 Visual Studio。如果有人能告诉我我做错了什么,那就太好了。

Sea*_*ton 5

虽然 Julia 的建议可能会起作用,但假设您使用的是足够新的版本,CMake 中包含一个用于 GLEW 的查找脚本,因此您应该使用它而不是手动包含路径。只需添加以下内容:

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

这将在您的系统上找到 GLEW,然后链接到必要的库并添加必要的包含目录。


小智 0

您的问题是您忘记将 GLEW 包含目录添加到您的项目中。您可以使用target_include_directoriesor include_directories,唯一的区别在于您将其放在CMakeLists.txt语法中的位置。

我更喜欢target_include_directories添加后的 CMakeLists.txt 如下所示:

cmake_minimum_required( VERSION 3.5 )

project(Starting)

find_package( OpenGL REQUIRED )

set( GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE )
set( GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE )
set( GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE )

add_subdirectory( ${PROJECT_SOURCE_DIR}/GLEW/build/cmake )
add_subdirectory( ${PROJECT_SOURCE_DIR}/GLFW )

add_executable( Starting ${PROJECT_SOURCE_DIR}/src/main.cxx )
target_include_directories(Starting PRIVATE
    ${PROJECT_SOURCE_DIR}/GLEW/include
)

target_link_libraries( Starting glew32s glfw )
Run Code Online (Sandbox Code Playgroud)