0

我最近开始将我用 Java(使用 lwjgl)编写的游戏引擎转换为 C/C++。我在 Fedora 25 上使用 Qt Creator 和 CMake(我很确定这不会影响任何东西)来链接所有目录、文件等。 GLFW 安装在我的系统上,但我决定使用源版本,而不是比包含的版本。我正在为我的扩展加载器使用高兴,并按照GLFW 网站上的教程对其进行配置。我没有通过“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>找到了这个建议)。这确实适用于我的文件,但我仍然对文件有同样的问题,即使在我编辑它以反映.main.cglad.cmain.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

4 回答 4

3

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

如果你在 linux 上,一个技巧是建立一个被.调用的软链接glad,然后你可以拥有glad/glad/glad/glad/glad.h它。

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

于 2017-02-24T04:01:15.757 回答
1

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

set(CMAKE_INCLUDE_CURRENT_DIR ON)

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

#include "glad.h"
于 2017-02-24T22:18:49.397 回答
0

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

于 2018-11-07T23:07:39.763 回答
0

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

于 2021-03-22T12:00:22.793 回答