问题描述
我在 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_directories
和 link_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
。