#include не находит файлы, в то время как предложения автозаполнения Visual Studio могут найти файлы

Я пытаюсь включить 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>

Как я могу заставить это работать?

Спасибо за ваше время, -Майкл

Используйте абсолютные пути в дополнительных каталогах включения.

n. m. 15.12.2020 09:19

Я заменил vendor/Glad/include на D:\VSProjects\solutionName\ProjectName\vendor\Glad\include внесенные изменения и перезапустил VS, но все равно получил ту же ошибку «C1083» для Glad/glad.h.

Michael 15.12.2020 09:31

не видно, что не так, проверьте на опечатки. Кстати, я думаю, что было бы лучше построить его как отдельный проект. Если файлы находятся в каталоге вашего проекта, используйте макрос VS $(ProjectDir), чтобы представить его, а не реальный путь.

n. m. 15.12.2020 09:50

Не могли бы вы уточнить, что вы имеете в виду, когда говорите: «Я думаю, было бы лучше построить его как отдельный проект». Если вы имеете в виду Glad, то я думаю, что я мог бы быть, поскольку Visual Studio действительно создает библиотеку в файле .lib и имеет проект в качестве зависимости для проекта, в который я пытаюсь включить заголовок. Я мог бы быть полностью не в курсе и непонимание того, что вы имеете в виду, хотя! Теперь я добавил макрос ко всем моим дополнительным путям к каталогам, и он работает, пока я не попытаюсь снова включить <glad/glad.h>.

Michael 15.12.2020 09:59

Итак, если это зависимость, почему вы помещаете ее в каталог своего проекта? Это не часть вашего проекта. Это отдельный проект.

n. m. 15.12.2020 10:02

В основном по привычке и незнанию того, куда я должен его вставлять, я обычно помещаю все свои внешние библиотеки, которые я использую, в папку с именем «vendor» в каталоге проекта, поэтому Glad, GLFW и spdlog находятся в этой папке поставщика.

Michael 15.12.2020 10:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
705
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте "glad/glad.h" вместо <glad/glad.h>.

С угловыми скобками компилятор ищет только стандартные пути для включений, с кавычками он также ищет дополнительные пути включения, которые вы определили.

Я изменил его, так что включение теперь читается #include "glad/glad.h" Но получите ту же ошибку «C1083», теперь под ней нет красной строки с ошибкой, так что это похоже на прогресс.

Michael 15.12.2020 09:11

Неверно, дополнительный путь поиска используется для поиска заголовочных файлов как в угловых скобках, так и в кавычках.

n. m. 15.12.2020 09:15

Что ж, раньше я ошибался... :-). Кажется, нам нужен его полный список дополнительных каталогов включения для дальнейшего анализа этой проблемы.

U. W. 15.12.2020 09:21

Обновление: не обращайте внимания на исчезновение подчеркивания красной ошибки, теперь оно возвращается после перезагрузки Visual Studio.

Michael 15.12.2020 09:21

Вот мой полный список дополнительных включаемых каталогов: "src" "vendor\spdlog\include" "vendor\GLFW\include" "vendor\Glad\include"

Michael 15.12.2020 09:23
Ответ принят как подходящий

Итак, я наконец понял это, я не доволен тем, как я должен был это сделать, но я думаю, что это работает, поэтому я буду двигаться дальше, если у кого-то нет предложений. Итак, проблема сводилась к тому, что я включал заголовки в статическую библиотеку, которую я делал, а затем использовал эту статическую библиотеку в другом месте. (Я не осознавал, что это проблема, иначе я бы упомянул об этом в своем первоначальном вопросе, извините всех.) Я включил свою библиотеку в заголовок, который включает все зависимости, к которым я хочу иметь доступ, а позже по линии эти Сторонние статические библиотеки будут становиться все более и более абстрактными, но на данный момент мне нужно было также сообщить моему другому проекту «песочница» (не библиотечный), чтобы также были дополнительные каталоги включения, такие как

$(SolutionDir)MyLibName\vendor\Glad\include

и

$(SolutionDir)MyLibName\vendor\GLFW\include

В идеале я не хотел включать ничего, кроме MyLib, но я думаю, что это моя работа на данный момент. Спасибо всем, кто предлагал предложения!

Ну, даже если вы спрячете все эти включаемые файлы в другой включаемый файл, по крайней мере, компилятор должен знать, где находятся все ваши включаемые файлы, иначе как компилятор их найдет?

U. W. 16.12.2020 09:04

Это имело бы смысл для меня, если бы место, где я должен был добавить включаемые каталоги, не было отдельным проектом от того, в котором я их нахожу. Насколько я понимаю, они должны быть скомпилированы только в статическую библиотеку, в которую я их связываю. драйвер, с которым я тестирую библиотеку.

Michael 16.12.2020 09:32

Другие вопросы по теме