#include <glad/glad.h>: 没有这样的文件或目录(即使 source 和 header 在同一目录中)

#include <glad/glad.h>: No such file or directory (even though source and header are in the same directory)

我最近开始将我在 Java 中编写的游戏引擎(使用 lwjgl)转换为 C/C++。我在 Fedora 25 上使用 Qt Creator 和 CMake(我很确定这不会影响任何东西)到 link 所有目录、文件等。我的系统上安装了 GLFW,但我决定使用源版本,而不是包含的版本。我正在为我的扩展加载器使用 glad,并按照 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>(我发现了那个建议 )。这确实适用于我的 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 和他们的 header 文件都在一个目录中。 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 网站上的教程不提供任何其他信息或故障排除。

非常感谢任何帮助或建议。谢谢。

似乎 glad.h 不在名为 glad 的目录中,因此通过 glad/glad.h 包含它永远不会起作用!

如果你在 linux 上,一个技巧是建立一个到 . 的软链接,称为 glad 然后你可以得到 glad/glad/glad/glad/glad.h 如果你想要它。

更好的解决方案是正确安装东西,使文件最终到达预期路径...

默认情况下,CMake 不包含当前目录。要启用此行为,您需要设置 CMAKE_INCLUDE_CURRENT_DIR 变量:

set(CMAKE_INCLUDE_CURRENT_DIR ON)

之后,为了包含 header,您的 glad.c 文件可能会使用

#include "glad.h"

如果glad文件夹在项目根目录下,表示:

KAGE
  glad

那么 Cmakelist 很高兴:

# glad
set(GLAD_DIR "${LIB_DIR}glad")
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_DIR}glad")set(GLAD_DIR "${LIB_DIR}lib/glad")

今天遇到同样的问题,发现了这个帖子。 我使用 vcpkg 来管理我的 pkg。 我可以确定文件的路径是正确的,但它不起作用。 神奇的是,当我删除#include 并重新输入它时,它起作用了。