Как указать препроцессору искать определенную папку для заголовочных файлов, когда я говорю #include <xyz.h> - PullRequest
2 голосов
/ 01 июня 2009

У меня около 120 заголовочных файлов (.h файлов), и каждый из них включает в себя множество других заголовочных файлов, используя #include <abcd/xyz.h>, но, поскольку я хранил .h файлы в определенной папке, препроцессор генерирует ошибку «файл не найден».

Я переместил все файлы .h в один файл .C, который вызывает первый файл заголовка.

Один из способов сделать это - сделать #include <abcd/xyz.h> как #include "abcd/xyz", но мне нужно сделать это во всех заголовочных файлах, где есть оператор включения, а их сотни.

Я не могу включить многие из них в раздел заголовочных файлов в Visualstudio, поскольку некоторые заголовочные файлы имеют одно и то же имя, но они находятся в разных каталогах. (* 1 010 *, <efgh/xyz.h>).

Есть ли способ сделать это?

Ответы [ 5 ]

4 голосов
/ 01 июня 2009

Необходимо добавить путь в «Дополнительные каталоги включения» в разделе «C ++» параметров проекта (вкладка «Общие»). Вы можете использовать переменные среды, а также ярлык «эта папка» (.) И ярлык «вверх на одну папку» (..), чтобы этот параметр не был привязан к определенной структуре каталогов.

2 голосов
/ 01 июня 2009

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

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

Вы не можете гарантировать, что компилятор найдет один заголовок перед другим без изменения самой директивы #include (и добавления относительного пути в качестве одного примера).

РЕДАКТИРОВАТЬ : Похоже, Visual Studio позволит вам указать разные дополнительные каталоги для включения в каждый исходный файл в проекте (нажмите правой кнопкой мыши на исходном файле в обозревателе решений и измените свойства C / C ++) , Но я думаю, что это будет больше работы, чем изменение самих директив #include - зависит от того, сколько у вас неуникальных имен файлов заголовков.

0 голосов
/ 01 июня 2009

Вы также можете добавить переменную INCLUDE к переменным среды.

0 голосов
/ 01 июня 2009

То, что вы ищете, это флаг -I, и вы указываете каталог ... Если у вас есть Makefile, вы должны добавить его в CPP_FLAGS примерно так ...

0 голосов
/ 01 июня 2009

В настройках проекта (под C / C ++ в VS2005 / 2008) есть опция «дополнительные каталоги включения». Здесь вы можете добавить папки, содержащие ваши заголовочные файлы, используя относительные пути.

Вы также можете сделать это на уровне IDE в Сервис -> Параметры -> Проекты и решения -> Каталоги VC ++ -> Включить файлы. Обычно этот метод зарезервирован для заголовков, включенных как часть формальной библиотеки. Первый вариант обычно предпочтительнее, так как он переносимый (вы можете отправить файл проекта другому разработчику и, если вы используете относительные / макро-пути, они могут построить проект как есть).

...