Вопрос

Моя физическая файловая структура моего проекта выглядит примерно так:

  • Исходная папка
  • Двигатель
    • Папка1
    • Папка2

и т. д.

У меня есть несколько файлов в «Источнике», некоторые в «Engine», некоторые в «Engine/Folder1» и т. д.

В моем проекте я перешел «Все конфигурации->Исходные каталоги» и включил «Источник», «Механизм», «Механизм/Папка2» и т. д.Тем не менее, я по-прежнему получаю ошибки, связанные с невозможностью найти файлы, когда я пытаюсь включить «Foo.h» или что-то еще из другой папки.Есть ли способ сделать так, чтобы мне не нужно было ../Folder1/ перед всем?

Это было полезно?

Решение

Есть ли способ сделать так, чтобы мне не нужно было ../Folder1/ перед всем?

Да, есть.Ответ зависит от нескольких факторов, и я уверен, что пропущу некоторые из них.

Проверьте следующее:

  • В настройках компилятора установите флажок «Дополнительные включения» в разделе «C/C++».
  • Также проверьте в «VC++» значение «Включить каталоги».
  • Проверьте настройку «Игнорировать стандартные пути включения» в «C/C++/Preprocessor».
  • Проверьте настройки предварительно скомпилированного заголовка
  • Проверьте свои «#define» / «#undef» в исходных файлах и настройках компилятора.
  • Проверьте листы свойств, которые ваш проект может использовать или унаследовать.

Если вы используете «foo.h» (а не <foo.h>), препроцессор сначала будет искать в папках вашего проекта, а в последнюю очередь в папках, специфичных для IDE.Если вы используете <foo.h>, он сначала запускается в стандартных папках включения, например.те, которые необходимы для стандартных библиотек времени выполнения.

Когда файл использует «../foo.h», это путь относительно местоположения файла, который включает этот файл.Могут быть непростые исключения.

Есть еще много вещей, которые могут повлиять на то, как препроцессор находит пути включения.Если вы не уверены, что препроцессор делает с конкретным файлом, вы можете сделать вывод препроцессора видимым, включив «Предварительная обработка в файл» в настройках препроцессора.В файле показан исходный код файла после завершения работы препроцессора и до начала работы компилятора.

Все становится намного проще с большим опытом и, в частности, с четкой стратегией структуры папок/проекта и способов включения файлов.Например, убедитесь, что у вас есть «#pragma Once» в качестве первой строки без комментариев в каждом включаемом файле.

Надеюсь, это даст вам несколько идей для следующих шагов.Удачи!

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

Я считаю это хорошей практикой:

  • Если включенный путь к файлу не требует использования «..», используйте относительные пути.
  • Если требуется использование «..», используйте абсолютные пути (то есть относительно корневой папки исходных файлов.

Чтобы абсолютные пути работали, добавьте корневую исходную папку в список подключаемых каталогов (относительно местоположения файла проекта).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top