【发布时间】:2021-03-25 20:32:02
【问题描述】:
我正在尝试包含 Glad(使用 GL3.3 api 从here 生成(GLFW 也有类似的包含问题)))
#include <glad/glad.h>
我觉得这应该可以工作,因为我在项目中为文件添加了额外的包含目录
vendor\Glad\include
我的 VS 解决方案的文件结构为
-solutionName
--projectName
---src
----projectname.h <- Where I am including from for now, latter I want to include from elsewhere under the src directory.
---vendor (same level as src)
----Glad
-----include
------glad
-------glad.h
------KHR
-------khrplatform.h
我已经能够通过将文件包含为来使包含工作
#include <../vendor/Glad/include/glad/glad.h>
但是当我这样做时,我得到一个错误(“C1083”“无法打开包含文件:'KHR/khrplatform.h':没有这样的文件或目录”),因为glad.h中的包含找不到khrplatform。 h 当它包括这样的时候
#include <KHR/khrplatform.h>
我可以在glad.h 中更改该行,但我真的不想更改库的代码来使我的工作正常。
这也发生在 GLFW 上,它镜像了额外的包含目录和文件路径,但很高兴在适用的情况下替换为 GLFW。
此外,Visual Studio 将提供
<glad/glad.h>
当我在 projectName.h 中输入包含行时建议使用文件路径,但我仍然收到错误“C1083”“无法打开包含文件:'glad/glad.h':没有这样的文件或目录”。
另一个怪癖是我使用 spdlog 文件附加包含目录
vendor\spdlog\include
并且能够在 src 目录中包含标题:
#include <spdlog/spdlog.h>
有效且不会引发问题。
这个文件结构是
-solutionName
--projectName
---src
----Utilities
-----Logger.h <- Where I am including from.
---vendor (same level as src)
----spdlog
-----include
------spdlog
-------spdlog.h <- file I am including just fine.
这让人感觉只有一些额外的包含目录在实际工作,我不确定为什么会发生这种情况,或者在花了几个小时进行猜测和检查后如何修复它。我想包括像
这样的库#include <glad/glad.h>
#include <GLFW/glfw3.h>
我怎样才能做到这一点?
感谢您的宝贵时间, -迈克尔
【问题讨论】:
-
在附加的包含目录中使用 absolute 路径。
-
我已将
vendor/Glad/include替换为D:\VSProjects\solutionName\ProjectName\vendor\Glad\include应用更改并重新启动VS,但对于glad/glad.h 仍然出现相同的“C1083”错误。 -
看不出有什么问题,请检查是否有错别字。顺便说一句,我认为将其构建为一个单独的项目会更好。如果文件位于您的项目目录中,请使用 VS 宏
$(ProjectDir)来表示它,而不是真实路径。 -
您能否详细说明当您说“我认为将其构建为单独的项目会更好”时的意思。如果您指的是 Glad,那么我想我可能会像 Visual Studio 那样将库构建到一个 .lib 文件中,并将该项目作为我试图包含标头的项目的依赖项。我可能完全偏离了基础并且误解了你的意思!我现在已将宏添加到所有其他包含目录路径中,并且在我再次尝试包含
之前它一直有效。 -
那么如果是依赖,为什么要放在你的项目目录下呢?它不是您项目的一部分。这是一个单独的项目。
标签: c++ visual-studio-2019 glfw glad