CMake 找不到 GL/glew.h

CMake not finding GL/glew.h

我在 pop_OS 下使用 CLion! 20.04,目前正在尝试让 CMake 与 GLEW 一起工作,因为我想跟随 these tutorials 开始使用 OpenGL。我是 C/C++ 的新手,也是 CMake 的新手。

我用 apt-get install 安装了 libgl1-mesa-devlibglew-devlibglfw3libglfw3-dev 软件包,而 glew.h 位于另一个软件包旁边/usr/include/GL.

中的 GL 头文件

尝试编译一个简单的程序时:

#include <GL/glew.h>

int main() {
    return 0;
}

cmake 找不到头文件:

test/main.cpp:1:10: fatal error: GL/glew.h: No such file or directory
    1 | #include <GL/glew.h>
      |          ^~~~~~~~~~~

我是否必须在 CMakeLists.txt 中手动添加这些头文件以便 cmake 找到它们?我尝试了十几种不同的建议,但没有成功。比如我试过

cmake_minimum_required(VERSION 3.17)
project(test)

set(CMAKE_CXX_STANDARD 14)

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

target_link_libraries(test GLEW::GLEW)

但这会导致

CMake Error at /app/extra/clion/bin/cmake/linux/share/cmake-3.17/Modules/FindPackageHandleStandardArgs.cmake:164 (message):
  Could NOT find GLEW (missing: GLEW_INCLUDE_DIRS GLEW_LIBRARIES)

这是否是 CLion 的问题,我需要以不同的方式将库包含到我的项目中?还是我用错了cmake?

你最后一次尝试几乎是正确的。

忘记 include_directorieslink_libraries 命令。在执行现代 CMake 时,它​​所需要的只是一个 add_executable(test main.cpp) 后跟一个 target_link_libraries(test PRIVATE GLEW::glew) 命令。目标 GLEW::glew(此处区分大小写)捆绑了所有编译定义,包括目录、库以及编译和 link 您的示例所需的进一步设置。

您的 CMakeLists.txt 现在看起来像这样:

cmake_minimum_required(VERSION 3.17)
project(test)

set(CMAKE_CXX_STANDARD 14)

find_package(GLEW REQUIRED)

add_executable(myTest main.cpp)

target_link_libraries(myTest PRIVATE GLEW::glew)

编辑:刚刚注意到,GLEW::GLEW 也可以使用。

@vre 的回答是好的。我只补充怎么自己找。

首先,运行

cmake --help-module-list

并寻找 GLEW。在Linux下,可以将这一步简化为

cmake --help-module-list | grep -i Glew

其中 -i 代表“不区分大小写的匹配”,因为我们通常不记得它是 GLEW 还是 Glew。知道模块名称后,您可以寻求与此模块相关的具体帮助:

cmake --help-module FindGLEW

答案就在那里。阅读并享受!

PS。没有必要记住这个答案。都可以减少到cmake --help.