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

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

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

Существуют ли специальные каталоги?


person Brian Sullivan    schedule 02.12.2008    source источник


Ответы (6)


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

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

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

person Rob Prouse    schedule 02.12.2008
comment
Хороший ответ, но я должен добавить, что в Visual Studio 2003 вы должны посмотреть Инструменты | Опции | Каталоги VC++, а не инструменты | Опции | Проекты и решения | Каталоги VС++. - person Graf; 25.11.2010
comment
препроцессор в VS 2010 просматривает текущий каталог только в том случае, если используется синтаксис включения в кавычках (например, #include what.h). Использование угловых скобок (например, #include ‹whatever.h›) опускает текущий каталог ( msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx ) - person Dennis Münkle; 21.06.2011
comment
В Visual Studio 2010 и более поздних версиях стандартные каталоги C++ больше не находятся в разделе tools-›options и находятся в глобальной таблице свойств: blogs.msdn.com/b/vsproject/archive/2009/07/07/ - person Mooing Duck; 19.02.2014
comment
Интересно, что никто еще не сказал просто каталог по умолчанию. Итак, вот он <root dir of Visual Studio>/VC/include/. У меня есть MSVC на моем рабочем ПК от предыдущего пользователя, но я использую GNU/Linux и не хочу запускать VC только для того, чтобы удовлетворить свое любопытство и посмотреть на заголовки Microsoft®. Кстати, о том, какое у меня было любопытство: я обнаружил, что MSDN даже не знает своих собственных имен заголовков! т.е. они ссылались на Iphlpapi.h, но такого файла не существует, его имя скорее iphlpapi.h, либо IPHlpApi.h(оба есть)! ржу не могу - person Hi-Angel; 03.09.2014
comment
Option VS › Инструменты › Параметры › Проекты и решения › Каталоги VC++ теперь устарели. - person BG BRUNO; 27.03.2015
comment
Каков текущий исходный каталог? Будет ли это каталог, в котором находится файл .vcxproj? Или другой каталог? - person cowlinator; 02.05.2020
comment
@cowlinator текущий исходный каталог — это каталог, в котором находится исходный файл. Если вы #include "MyClass.h" в MyClass.cpp, он будет искать в том же каталоге, что и файл CPP. Вы также можете использовать относительные пути. - person Rob Prouse; 05.05.2020

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

  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>. Номер версии может отличаться в зависимости от вашего программного обеспечения.

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

person linrongbin    schedule 03.10.2018
comment
Это самый прямой ответ на ОП. Хотя другие ответы говорят о других проблемах, это должен быть принятый ответ. - person winux; 06.02.2019
comment
@linrongbin Я очищаю каталоги, созданные последней установкой VS Build Tools. Вы правы насчет первого. Но я отключил опцию Windows SDK, так что это фактически означает, что у меня нет заголовков C, что, в свою очередь, означает, что рабочий процесс C++ в BuildTools не поддерживает C. - person Hatebit; 06.06.2019

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

person Adam Rosenfield    schedule 02.12.2008

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

person Markus    schedule 25.02.2016
comment
У вас есть ссылка на этот баг или ссылка на него, пожалуйста? - person Preet Sangha; 27.04.2016
comment
Нет, я сам нашел и не сообщил об этом - person Markus; 04.02.2020
comment
Эта ошибка все еще существует в Visual Studio Community 2019, мне нужно сначала добавить путь включения в конфигурацию win32, затем снова добавить его в конфигурацию x64, применить изменение, после чего все заработает. После этого вернуться к удалению пути в win32 все равно будет работать. - person reddy; 08.02.2021

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

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

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

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

or

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

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

person SteveWilkinson    schedule 23.02.2012

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

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

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

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

Скажем так: делайте это, но делайте это в User-Directory по адресу

C:\Пользователи\ИмяПользователя\AppData\Local\Microsoft\MSBuild\v4.0

в XML-файле

Microsoft.Cpp.Win32.user.props

и/или

Microsoft.Cpp.x64.user.props

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

Затем вы делаете это так же, как это делает VisualStudio, и все штатно.

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

person Pablo el Puro    schedule 24.02.2016
comment
Если бы только в заголовке был С++, и признал ошибку, ища 64-битные пути в разделе 32-битного пути - person Markus; 10.05.2018
comment
@Markus Другие языки программирования также должны включать пути, я думаю, на самом деле приятно, что у нас нет 500 разных вопросов с одним и тем же ответом, единственная разница заключается в названии языка программирования в названии. - person Peter Krebs; 25.02.2021
comment
Я не согласен, потому что у каждой IDE и языка будет свой путь, поэтому не может быть одного ответа для всех языков. ОП обновил вопрос, включив в него С++. Если когда-либо будет исключительный язык, к которому не применим этот ответ, как вы узнаете? - person Markus; 26.02.2021