首页 > 解决方案 > CMake 找不到 GL/glew.h

问题描述

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

我安装了libgl1-mesa-dev, libglew-dev, libglfw3,libglfw3-dev包,apt-get installglew.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?

标签: c++cmakeclionglew

解决方案


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

忘记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。


推荐阅读