Как включить подкаталоги в Visual Studio?

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

4 ответа

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

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

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

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


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

@ "IncludeFolders.rsp"

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


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


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

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 использует по умолчанию. BTW, команда подстановки работает без административных прав, но не наступает на существующую физическую или сопоставленную букву диска (я не уверен, что произойдет - я не хочу проверять ее на данный момент).

Этот шаг является необязательным. Я в MSVS 2010+ добавляю персонализированную страницу свойств. BTW, если вы не знаете о пользовательских листах свойств, вы должны. См. Страницы свойств (Visual С++). VIEW-Other Window-Property Window, щелкните правой кнопкой мыши проект в Менеджере свойств, добавьте новый лист свойств проекта. В разделе "Макросы пользователя" добавьте макрос, например. 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 символов - может ли кто-нибудь объяснить это?

В Страницы свойств для проекта (т.е. не пользовательский лист свойств) в моем примере я перешел в Configuration Properties-VС++ Directories и изменил значение Include Directories на $(MyProjectIncludePaths), но на практике это вы (на странице пользовательской страницы свойств, если вы ее создали) C/С++ - Общие и добавьте $(MyProjectIncludePaths) в дополнительные каталоги Include.

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

licensed under cc by-sa 3.0 with attribution.