Как включить подкаталоги в Visual Studio? - PullRequest
15 голосов
/ 04 декабря 2008

Я должен включить много заголовочных файлов, которые находятся в разных подкаталогах. Есть ли способ в Visual Studio (я использую редакцию 2005 года), чтобы задать один путь включения, который Visual Studio будет также искать в подкаталогах для файлов заголовков?

Ответы [ 4 ]

19 голосов
/ 04 декабря 2008

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

Мое предложение будет заключаться в организации вашего кода таким образом, чтобы относительные пути подкаталогов (относительно вашего включающего кода) были фиксированными:

  • Добавить «базовую папку» в проект ( свойства проекта -> Свойства конфигурации -> C / C ++ -> Дополнительные каталоги включения, «дополнительные каталоги включения» )
  • Добавить подкаталоги в операторы #include, т.е. #include "subdirectory/somefile.h".

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

6 голосов
/ 04 декабря 2008

Мы не нашли способа настроить рекурсивный поиск папок в Visual Studio (хотя у XCode нет проблем с их настройкой и использованием). Что мы делаем, это перечисляем все каталоги в файле и указываем этот файл в дополнительных параметрах командной строки C / C ++:

@ "IncludeFolders.rsp"

Мы редко сталкиваемся с проблемами при использовании рекурсивного поиска, хотя случайное включение `` / '' несколько раз замедляло ход событий.

1 голос
/ 23 октября 2014

Я обнаружил, что могу сократить длину пути в большинстве ситуаций, в том числе в MSVC, с помощью небольшого ручного трюка с помощью команды SUBST. Я покажу и пример для сокращения унаследованных C ++ включенных путей по умолчанию, но вы сделаете это для связанных с проектом путей включения. Сначала создайте один или несколько командных файлов, как это (и запустите их из Windows Explorer или командной строки):

MDrive.bat:
subst M: /D
subst M: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

WDrive.bat:
subst W: /D
subst W: "C:\Program Files (x86)\Windows Kits\8.1\Include"

... This is just and example.  You would do this for your
    project related include directories.

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

Этот шаг не является обязательным. Я в MSVS 2010+ добавляю свой лист свойств. Кстати, если вы не знаете о пользовательских листах свойств, вам следует. См. Страницы свойств (Visual C ++) . VIEW-Other Окно-свойства Windows , щелкните правой кнопкой мыши проект в менеджере свойств, Добавьте новый лист свойств проекта . Под Пользовательские макросы добавьте макрос, например, MyProjectIncludePaths и установите значение (в этом примере) на

M:; M:\atlmfc\include; W:\um; W:\shared; W:\winrt

- только 49 символов в этом примере, что намного короче, чем значение по умолчанию

$(VC_IncludePath); $(WindowsSKD_IncludePath)

, который при расширении макроса переводится в

C:\Program Files (x86)\Windows Kits\8.1\Include;C:\Program Files (x86)\Windows Kits\8.1\Include\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt

По моим подсчетам значение по умолчанию составляет 270 символов - т.е. длиннее 260 символов - кто-нибудь может это объяснить?

На страницах свойств для проекта (т.е. не в списке настраиваемых свойств) в моем примере я перешел к Каталоги свойств конфигурации VC ++ и изменил Включить каталоги значение в $ (MyProjectIncludePaths) , но на практике вы можете перейти к нему (на странице страницы пользовательских свойств, если вы его создали) C / C ++ - General и добавить $ (MyProjectIncludePaths) в Дополнительные каталоги включения .

В дополнение к унаследованным 270-символьным путям я смог добавить несколько путей разумной длины в Дополнительные каталоги включения . Может быть, каталоги дополнительных включений имеют собственный предел длины (?).

1 голос
/ 04 декабря 2008

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

...