Я пытаюсь включить Glad (созданный из здесь с API GL3.3 (имея аналогичную проблему включения с 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, который имеет зеркальное отображение дополнительных каталогов включения и путей к файлам, но с заменой Glad на GLFW, где это применимо.
Кроме того, Visual Studio предложит
<glad/glad.h>
путь к файлу в качестве предложения, когда я набираю строку включения в projectName.h, но все равно получаю сообщение об ошибке «C1083» «Не удается открыть включаемый файл:« рад/глад.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>
Как я могу заставить это работать?
Спасибо за ваше время, -Майкл
Я заменил vendor/Glad/include
на D:\VSProjects\solutionName\ProjectName\vendor\Glad\include
внесенные изменения и перезапустил VS, но все равно получил ту же ошибку «C1083» для Glad/glad.h.
не видно, что не так, проверьте на опечатки. Кстати, я думаю, что было бы лучше построить его как отдельный проект. Если файлы находятся в каталоге вашего проекта, используйте макрос VS $(ProjectDir)
, чтобы представить его, а не реальный путь.
Не могли бы вы уточнить, что вы имеете в виду, когда говорите: «Я думаю, было бы лучше построить его как отдельный проект». Если вы имеете в виду Glad, то я думаю, что я мог бы быть, поскольку Visual Studio действительно создает библиотеку в файле .lib и имеет проект в качестве зависимости для проекта, в который я пытаюсь включить заголовок. Я мог бы быть полностью не в курсе и непонимание того, что вы имеете в виду, хотя! Теперь я добавил макрос ко всем моим дополнительным путям к каталогам, и он работает, пока я не попытаюсь снова включить <glad/glad.h>.
Итак, если это зависимость, почему вы помещаете ее в каталог своего проекта? Это не часть вашего проекта. Это отдельный проект.
В основном по привычке и незнанию того, куда я должен его вставлять, я обычно помещаю все свои внешние библиотеки, которые я использую, в папку с именем «vendor» в каталоге проекта, поэтому Glad, GLFW и spdlog находятся в этой папке поставщика.
Используйте "glad/glad.h"
вместо <glad/glad.h>
.
С угловыми скобками компилятор ищет только стандартные пути для включений, с кавычками он также ищет дополнительные пути включения, которые вы определили.
Я изменил его, так что включение теперь читается #include "glad/glad.h"
Но получите ту же ошибку «C1083», теперь под ней нет красной строки с ошибкой, так что это похоже на прогресс.
Неверно, дополнительный путь поиска используется для поиска заголовочных файлов как в угловых скобках, так и в кавычках.
Что ж, раньше я ошибался... :-). Кажется, нам нужен его полный список дополнительных каталогов включения для дальнейшего анализа этой проблемы.
Обновление: не обращайте внимания на исчезновение подчеркивания красной ошибки, теперь оно возвращается после перезагрузки Visual Studio.
Вот мой полный список дополнительных включаемых каталогов: "src" "vendor\spdlog\include" "vendor\GLFW\include" "vendor\Glad\include"
Итак, я наконец понял это, я не доволен тем, как я должен был это сделать, но я думаю, что это работает, поэтому я буду двигаться дальше, если у кого-то нет предложений. Итак, проблема сводилась к тому, что я включал заголовки в статическую библиотеку, которую я делал, а затем использовал эту статическую библиотеку в другом месте. (Я не осознавал, что это проблема, иначе я бы упомянул об этом в своем первоначальном вопросе, извините всех.) Я включил свою библиотеку в заголовок, который включает все зависимости, к которым я хочу иметь доступ, а позже по линии эти Сторонние статические библиотеки будут становиться все более и более абстрактными, но на данный момент мне нужно было также сообщить моему другому проекту «песочница» (не библиотечный), чтобы также были дополнительные каталоги включения, такие как
$(SolutionDir)MyLibName\vendor\Glad\include
и
$(SolutionDir)MyLibName\vendor\GLFW\include
В идеале я не хотел включать ничего, кроме MyLib, но я думаю, что это моя работа на данный момент. Спасибо всем, кто предлагал предложения!
Ну, даже если вы спрячете все эти включаемые файлы в другой включаемый файл, по крайней мере, компилятор должен знать, где находятся все ваши включаемые файлы, иначе как компилятор их найдет?
Это имело бы смысл для меня, если бы место, где я должен был добавить включаемые каталоги, не было отдельным проектом от того, в котором я их нахожу. Насколько я понимаю, они должны быть скомпилированы только в статическую библиотеку, в которую я их связываю. драйвер, с которым я тестирую библиотеку.
Используйте абсолютные пути в дополнительных каталогах включения.