【发布时间】:2010-09-25 00:36:29
【问题描述】:
我从 SourceForge(HoboCopy,如果你好奇的话)检查了一个 C++ 应用程序的副本并尝试编译它。
Visual Studio 告诉我它找不到特定的头文件。我在源码树中找到了这个文件,但是我需要把它放在哪里,这样编译的时候才能找到呢?
有特殊目录吗?
【问题讨论】:
标签: c++ visual-studio header
我从 SourceForge(HoboCopy,如果你好奇的话)检查了一个 C++ 应用程序的副本并尝试编译它。
Visual Studio 告诉我它找不到特定的头文件。我在源码树中找到了这个文件,但是我需要把它放在哪里,这样编译的时候才能找到呢?
有特殊目录吗?
【问题讨论】:
标签: c++ visual-studio header
Visual Studio 按以下顺序查找标头:
在您的情况下,将标题所在的目录添加到项目属性中(Project Properties → Configuration → C/C++ → 常规 → 其他包含目录)。
【讨论】:
<root dir of Visual Studio>/VC/include/。我的工作 PC 中有一个来自以前用户的 MSVC,但我使用的是 GNU/Linux,并且不想启动 VC 只是为了满足我查看 Microsoft® 标头的好奇心。顺便说一句,关于我的好奇心:我发现 MSDN 甚至不知道它自己的标题名称! IE。他们提到了Iphlpapi.h,但是这样的文件不存在,它的名字是iphlpapi.h,或者IPHlpApi.h(两者都有)!大声笑
实际上在我的带有 Visual Studio 2017 社区的 Windows 10 上,C++ 标头路径是:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.15.26726\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\ucrt
第一个包含标准 C++ 标头,例如 <iostream>、<algorithm>。第二个包含旧的 C 标头,例如 <stdio.h>、<string.h>。版本号可能因您的软件而异。
希望这会有所帮助。
【讨论】:
如果项目附带 Visual Studio 项目文件,则应该已经配置为为您查找标头。如果没有,您必须将包含文件目录添加到项目设置中,方法是右键单击项目并选择属性,单击“C/C++”,然后将包含包含文件的目录添加到“附加包含目录”编辑框。
【讨论】:
Visual Studio 2015 社区中似乎存在错误。对于 64 位项目,找不到包含文件夹,除非它位于 win32 位配置其他包含文件夹列表中。
【讨论】:
试图将此作为评论添加到Rob Prouse 的帖子中,但由于缺少格式,因此无法理解。
在 Visual Studio 2010 中,“工具 | 选项 | 项目和解决方案 | VC++ 目录”对话框报告“工具 > 选项中的 VC++ 目录编辑已被弃用”,建议您使用相当违反直觉的属性管理器。
如果您真的非常想更新默认的 $(IncludePath),您必须修改 XML 文件之一中的相应条目:
\程序文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\PlatformToolsets\v100\Microsoft.Cpp.Win32.v100.props
或
\程序文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\x64\PlatformToolsets\v100\Microsoft.Cpp.X64.v100.props
(可能不是 Microsoft 推荐的。)
【讨论】:
存在一个较新的问题,问How do include paths work in Visual Studio? 更好地解决问题是什么
在较新版本的 VisualStudio 中揭示了如何做到这一点
第二个是上面史蒂夫威尔金森的回答所解释的,他认为自己是什么,而不是微软会推荐的。
这里说的捷径:做,但在用户目录中做
C:\Users\UserName\AppData\Local\Microsoft\MSBuild\v4.0
在 XML 文件中
Microsoft.Cpp.Win32.user.props
和/或
Microsoft.Cpp.x64.user.props
而不是在 C:\program files - 目录中,Microsoft 未修改的 Factory-File 预计将驻留在该目录中。
然后您按照 VisualStudio 的方式进行操作,一切正常。
有关为什么要这样做的更多信息,请参阅我的回答 there。
【讨论】: