#include <glad glad.h =“”>:没有这样的文件或目录(即使源和头都在同一目录中)

时间:2017-02-24 03:52:55

标签: c opengl cmake header opengl-extensions

我最近开始将我用Java编写的游戏引擎(使用lwjgl)转换为C / C ++。我在Fedora 25上使用Qt Creator和CMake(我很确定这不影响任何事情)链接所有目录,文件等。我的系统上安装了GLFW,但我决定使用源版本,而不是比包含的版本。我很高兴我的扩展加载器,并按照GLFW website上的教程配置它。我没有通过“Hello World”测试,因为当我在glad.h文件中包含main.c文件时,出现错误:

<glad/glad.h>: No such file or directory

同样奇怪的是,我在glad.c文件中得到了同样的错误,这个错误是使用高兴自己的生成器创建的。我的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网站上的教程不提供任何其他信息或故障排除。

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

4 个答案:

答案 0 :(得分:3)

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

如果你在linux上,一个技巧就是建立一个名为. glad的软链接,如果你愿意,可以glad/glad/glad/glad/glad.h

更好的解决方案是正确安装内容,以便文件最终达到预期的路径......

答案 1 :(得分:1)

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

set(CMAKE_INCLUDE_CURRENT_DIR ON)

在包含标题后,您的glad.c文件可能会使用

#include "glad.h"

答案 2 :(得分:0)

如果“高兴”文件夹位于项目根目录中,则表示:

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")

答案 3 :(得分:-1)

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