#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 文件时,我收到一个错误:

&lt;glad/glad.h&gt;: 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: 而不是&lt;glad/glad.h&gt;(我发现了这个建议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),用于保存我使用的所有内容。我发现的唯一接近我正在寻找的解决方案是将&lt;glad/glad.h&gt; 替换为"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 &lt;GLFW/glfw3.h&gt; 没有问题,即使它们在项目目录中的设置方式相同。 当您使用#include &lt;glad/glad.h&gt; 时,您要求编译器在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>: 没有这样的文件或目录(即使源代码和头文件在同一个目录中)的主要内容,如果未能解决你的问题,请参考以下文章

使用glew和glad 新建窗口

如何将 <glad/glad.h> 包含在 C++ 中的多个头文件中?

texture

Base Env

GL_UI

OpenGL 第一个三角形!!!!