Где Visual Studio ищет файлы заголовков C ++?


95

Я проверил копию приложения C ++ из SourceForge (HoboCopy, если вам интересно) и попытался скомпилировать его.

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

Есть ли специальные каталоги?

Ответы:


118

Visual Studio ищет заголовки в следующем порядке:

  • В текущем исходном каталоге.
  • В дополнительных каталогах включения в свойствах проекта ( Проект -> [имя проекта] Свойства , в разделе C / C ++ | Общие).
  • В Visual Studio C ++ включить каталоги в ИнструментыПараметрыПроекты и решенияКаталоги VC ++ .
  • В новых версиях Visual Studio (2015+) указанный выше параметр устарел, а список включаемых каталогов по умолчанию доступен в Project PropertiesConfigurationVC ++ Directories.

В вашем случае добавьте каталог, который находится в заголовке, в свойства проекта ( Свойства проектаКонфигурацияC / C ++ОбщиеДополнительные каталоги включения ).


3
Хороший ответ, но я должен добавить, что в Visual Studio 2003 вы должны смотреть на «Инструменты | Параметры | Каталоги VC ++», а не на «Инструменты | Параметры | Проекты и решения | Каталоги VC ++».
Graf

38
препроцессор в VS 2010 просматривает текущий каталог только в том случае, если используется цитируемый синтаксис включения (например, #include "something.h"). Использование угловых скобок (например, #include < something.h >) исключает текущий каталог ( msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx )
Деннис Мюнкле

5
В Visual Studio 2010 и новее, в «стандарт C ++ каталоги» больше не находится под Инструменты-> Настройки и в глобальной таблице свойств: blogs.msdn.com/b/vsproject/archive/2009/07/07/...
мычание Duck

8
Интересно, что еще никто не сказал только каталог по умолчанию. Итак, вот оно <root dir of Visual Studio>/VC/include/. У меня есть MSVC на моем рабочем ПК от предыдущего пользователя, но я использую GNU / Linux и не хочу запускать VC только для удовлетворения своего любопытства и просмотра заголовков Microsoft®. Кстати, о том, какое у меня было любопытство: я обнаружил, что MSDN даже не знает своих собственных имен заголовков! Т.е. сослались Iphlpapi.h, но такого файла не существует, скорее его имя iphlpapi.h, либо IPHlpApi.h(оба есть)! lol
Hi-Angel

17
Вариант "VS> Инструменты> Параметры> Проекты и решения> Каталоги VC ++" теперь не используется.
BG BRUNO

25

На самом деле в моем Windows 10 с сообществом Visual Studio 2017 путь заголовков C ++:

  1. C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include

  2. C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt

Первый содержит стандартные C ++ заголовки , такие как <iostream>, <algorithm>. Второй содержит старые заголовки C , такие как <stdio.h>, <string.h>. Номер версии может отличаться в зависимости от вашего программного обеспечения.

Надеюсь, это поможет.


1
Это самый прямой ответ OP. Хотя в других ответах говорится о других проблемах, это должен быть принятый ответ.
Winux

@linrongbin Я очищаю каталоги, созданные последней установкой VS Build Tools. Насчет первого вы правы. Но я снял флажок с Windows SDK, так что это фактически означает, что у меня нет заголовков C, что, в свою очередь, означает, что рабочий процесс C ++ в BuildTools не поддерживает C.
Hatebit

11

Если к проекту прилагается файл проекта Visual Studio, то он уже должен быть настроен для поиска заголовков за вас. Если нет, вам придется добавить каталог включаемых файлов в настройки проекта, щелкнув проект правой кнопкой мыши и выбрав «Свойства», выбрав «C / C ++» и добавив каталог, содержащий файлы включаемых файлов, в «Дополнительные каталоги включения». поле редактирования.


6

Пытался добавить это как комментарий к публикации Роба Проуза , но из-за отсутствия форматирования это было непонятно.

В Visual Studio 2010 диалоговое окно «Инструменты | Параметры | Проекты и решения | Каталоги VC ++» сообщает, что «Редактирование каталогов VC ++ в меню« Инструменты »>« Параметры »устарело», предлагая использовать довольно противоречивый диспетчер свойств.

Если вы действительно хотите обновить значение по умолчанию $ (IncludePath), вам нужно взломать соответствующую запись в одном из файлов XML:

\ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ Win32 \ PlatformToolsets \ v100 \ Microsoft.Cpp.Win32.v100.props

или

\ Program Files (x86) \ MSBuild \ Microsoft.Cpp \ v4.0 \ Platforms \ x64 \ PlatformToolsets \ v100 \ Microsoft.Cpp.X64.v100.props

(Вероятно, не рекомендуется Microsoft.)


6

Похоже, в сообществе Visual Studio 2015 есть ошибка. Для 64-битного проекта включаемая папка не найдена, если она не находится в списке дополнительных включаемых папок конфигурации win32 .


3
У вас есть ссылка на эту ошибку или ссылку на нее, пожалуйста?
Preet Sangha,

Нет, я сам нашел и не сообщил об этом
Маркус

5

Существует более новый вопрос, в чем заключается проблема, лучше спросить Как включить пути в Visual Studio?

Раскрывается способ сделать это в более новых версиях VisualStudio.

  • только в текущем проекте (так как здесь тоже ставится вопрос), а также
  • для каждого нового проекта по умолчанию

Второе - это то, что объясняет ответ Стива Уилкинсона выше, что, как он сам предполагал, не то, что рекомендует Microsoft.

Чтобы сказать здесь короткий путь: сделайте это, но сделайте это в User-Directory по адресу

C: \ Users \ UserName \ AppData \ Local \ Microsoft \ MSBuild \ v4.0

в XML-файле

Microsoft.Cpp.Win32.user.props

и / или

Microsoft.Cpp.x64.user.props

а не в каталоге C: \ program files -, где, как ожидается, будет находиться неизмененный Factory-File Microsoft.

Затем вы делаете это так же, как VisualStudio, и все в порядке.

Для получения дополнительной информации, почему это нужно делать одинаково, см. Мой ответ там .


2
Если бы только в заголовке было «C ++» и призналась ошибка поиска 64-битных путей в 32-битном разделе пути
Маркус
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.