#include <glad/glad.h>: 没有这样的文件或目录(即使源代码和头文件在同一个目录中)
Posted
技术标签:
【中文标题】#include <glad/glad.h>: 没有这样的文件或目录(即使源代码和头文件在同一个目录中)【英文标题】:#include <glad/glad.h>: No such file or directory (even though source and header are in the same directory) 【发布时间】:2017-02-24 03:52:54 【问题描述】:我最近开始将我用 Java(使用 lwjgl)编写的游戏引擎转换为 C/C++。我在 Fedora 25 上使用 Qt Creator 和 CMake(我很确定这不会影响任何东西)来链接所有目录、文件等。 GLFW 安装在我的系统上,但我决定使用源版本,而不是比包含的版本。我正在为我的扩展加载器使用高兴,并按照GLFW website 上的教程对其进行配置。我没有通过“Hello World”测试,因为当我在我的 main.c
文件中包含 glad.h
文件时,我收到一个错误:
<glad/glad.h>: No such file or directory
同样奇怪的是,我在glad.c
文件中遇到了同样的错误,该文件是使用glad 自己的生成器创建的。我的main.c
文件看起来像这样
#include <stdio.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main(int argc, char *argv[])
printf("Kick Ass Game Engine");
return 0;
我也尝试过使用"glad.h:
而不是<glad/glad.h>
(我发现了这个建议here)。这确实适用于我的main.c
文件,但我仍然对glad.c
文件有同样的问题,即使在我编辑它以反映main.c
之后。
我的项目目录如下所示:
- KAGE/
-> CMakeLists.txt
-> glad.c
-> glad.h
-> main.c
-> khplatform.h
-> KAGE/lib/
-> glad
-> glfw-3.2.1
如您所见,我所有的.c
及其头文件都在一个目录中。 lib
目录是我保持高兴和 glfw 的地方。我只是将文件从lib/glad
目录复制到主项目之一。
我的CMake
看起来像这样
project(KAGE)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable($PROJECT_NAME $SRC_LIST)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(/home/brian/KAGE/lib/glfw-3.2.1)
find_package(OpenGL REQUIRED)
target_link_libraries(KAGE glfw)
我尝试过四处搜索,但人们在尝试调用系统上安装的库时遇到的所有问题。我的没有安装。我有一个单独的目录 (lib
),用于保存我使用的所有内容。我发现的唯一接近我正在寻找的解决方案是将<glad/glad.h>
替换为"glad.h"
。正如我之前所说,这不起作用。 GLFW 网站上的教程不提供任何其他信息或故障排除。
非常感谢任何帮助或建议。谢谢。
【问题讨论】:
【参考方案1】:似乎glad.h
不在名为glad
的目录中,因此通过glad/glad.h
包含它永远不会起作用!
如果你在 linux 上,一个技巧是创建一个指向 .
的软链接,称为 glad
,然后你可以拥有 glad/glad/glad/glad/glad.h
。
更好的解决方案是正确安装东西,以便文件最终到达预期的路径...
【讨论】:
创建glad
目录无效。我仍然有同样的问题。我还根据高兴的网站安装了高兴。它仅用于生成头文件,除了pip
使用的目录外,不需要任何特殊的安装目录。而且由于 glfw 对我的设置方式没有任何问题,我不明白没有一个高兴的目录是多么的问题。 glfw 网站还说,只需将高兴生成的文件放在项目的根目录中即可。【参考方案2】:
CMake 默认不包含当前目录。要启用此行为,您需要设置 CMAKE_INCLUDE_CURRENT_DIR 变量:
set(CMAKE_INCLUDE_CURRENT_DIR ON)
之后包含您的glad.c
文件可能使用的标题
#include "glad.h"
【讨论】:
这行得通。我还必须更改glad.c
文件以使用#include "glad.h"
和我的main.c
。谢谢你。你知道为什么#include
以前没有工作吗?它在glad.c
文件中给了我同样的错误,但#include <GLFW/glfw3.h>
没有问题,即使它们在项目目录中的设置方式相同。
当您使用#include <glad/glad.h>
时,您要求编译器在include 目录 之一中查找指定的相对路径。由于您的目录都不包含此相对路径,因此编译器找不到它。此外,应在 CMake 中使用 include_directories()
命令指定包含目录。这是由 GLFW 在您执行 add_subdirectory()
以构建此库时完成的。【参考方案3】:
如果glad文件夹在项目根目录下,则表示:
KAGE
glad
然后是高兴的 Cmakelist:
# glad
set(GLAD_DIR "$LIB_DIRglad")
add_library("glad" "$GLAD_DIR/src/glad.c")
target_include_directories("glad" PRIVATE "$GLAD_DIR/include")
target_include_directories($PROJECT_NAME PRIVATE "$GLAD_DIR/include")
target_link_libraries($PROJECT_NAME "glad" "$CMAKE_DL_LIBS")
如果它在 lib 目录中
KAGE
lib
glad
然后更改 cmkaelist:
从set(GLAD_DIR "$LIB_DIRglad")
到set(GLAD_DIR "$LIB_DIRlib/glad")
【讨论】:
【参考方案4】:今天我遇到了同样的问题,发现了这个帖子。
我使用 vcpkg 来管理我的 pkg。
我可以确定文件的路径是正确的,但它不起作用。
神奇的是,当我删除 #include
【讨论】:
你确定,当你“重新进入”包含行时,它实际上是一样的吗?以上是关于#include <glad/glad.h>: 没有这样的文件或目录(即使源代码和头文件在同一个目录中)的主要内容,如果未能解决你的问题,请参考以下文章