2008-12-04 2 views
13

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

ответ

16

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

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

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

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

1

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

+6

Неправильно. Рекурсивные поисковые запросы были стандартными среди классических сред разработки Macintosh, таких как CodeWarrior. У них было простое соглашение о том, что использование parens вокруг (каталога) пропустило его с автоматическим включением, поэтому вам пришлось добавить определенный путь. Это очень упростило список включений, и я всегда пропустил его в Windows. – 2010-05-19 06:01:54

6

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

@ «IncludeFolders.rsp» при том, что

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

1

Я обнаружил, что я могу сократить длину пути в большинстве ситуаций, в том числе в MSVC, небольшим трюком с помощью команды SUBST. Я покажу и пример для сокращения унаследованных по умолчанию C++ 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, если вы не знаете о пользовательских листах свойств, вы должны. См. Property Pages (Visual C++). VIEW-Other Windows-Property Window, щелкните правой кнопкой мыши проект в Менеджере недвижимости, Добавить новый лист свойств проекта. Под Пользовательские макросы, добавьте макрос, например.MyProjectIncludePaths и установить значение (в данном примере) в

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

--only 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-VC++ Directories и изменили каталоги включения значение $ (MyProjectIncludePaths) , но на практике это вы перейдете к (на странице пользовательской страницы свойств, если вы ее создали) C/C++ - общий и добавьте $ (MyProjectIncludePaths) в Дополнительные каталоги ссылок.

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

Смежные вопросы