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-dev
、libglew-dev
、libglfw3
、libglfw3-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_directories
和 link_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
.
我在 pop_OS 下使用 CLion! 20.04,目前正在尝试让 CMake 与 GLEW 一起工作,因为我想跟随 these tutorials 开始使用 OpenGL。我是 C/C++ 的新手,也是 CMake 的新手。
我用 apt-get install
安装了 libgl1-mesa-dev
、libglew-dev
、libglfw3
、libglfw3-dev
软件包,而 glew.h
位于另一个软件包旁边/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
(此处区分大小写)捆绑了所有编译定义,包括目录、库以及编译和 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
.