CMake 找不到 GL/glew.h

问题描述

我在 pop_OS 下使用 CLion! 20.04 并且目前正在尝试让 CMake 与 GLEW 一起使用,因为我想跟随 these tutorials 开始使用 OpenGL。我对 C/C++ 比较陌生,对 CMake 完全陌生。

我使用 libgl1-mesa-dev 安装了 libglew-dev,libglfw3,libglfw3-dev,apt-get install 软件包,glew.h 位于另一个 GL 标头旁边/usr/include/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(此处的案例很重要)捆绑了所有编译定义,包括编译和链接示例所需的目录、库和其他设置。

您的 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

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

附注。没有必要记住这个答案。所有都可以简化为 cmake --help