【问题标题】:Where does Visual Studio look for C++ header files?Visual Studio 在哪里寻找 C++ 头文件?
【发布时间】:2010-09-25 00:36:29
【问题描述】:

我从 SourceForge(HoboCopy,如果你好奇的话)检查了一个 C++ 应用程序的副本并尝试编译它。

Visual Studio 告诉我它找不到特定的头文件。我在源码树中找到了这个文件,但是我需要把它放在哪里,这样编译的时候才能找到呢?

有特殊目录吗?

【问题讨论】:

    标签: c++ visual-studio header


    【解决方案1】:

    Visual Studio 按以下顺序查找标头:

    • 在当前源目录中。
    • 在项目属性的附加包含目录中(项目 -> [项目名称] 属性,在 C/C++ | 常规下)。
    • 在 Visual Studio C++ Include 目录ToolsOptionsProjects and Solutions VC++ 目录
    • 在新版本的 Visual Studio (2015+) 中,上述选项已弃用,默认包含目录列表可在 Project PropertiesConfiguration VC++ 目录

    在您的情况下,将标题所在的目录添加到项目属性中(Project PropertiesConfigurationC/C++ → 常规 → 其他包含目录)。

    【讨论】:

    • 不错的答案,但我必须补充一点,在 Visual Studio 2003 中,您应该查看“工具 | 选项 | VC++ 目录”而不是“工具 | 选项 | 项目和解决方案 | VC++ 目录”。跨度>
    • VS 2010 中的预处理器仅在使用引用的包含语法(例如 #include "whatever.h")时才查看当前目录。使用尖括号(例如#include )会省略当前目录(msdn.microsoft.com/en-us/library/36k2cdd4(v=VS.100).aspx
    • 在 Visual Studio 2010 及更高版本中,“标准 C++ 目录”不再位于 tools->options 下,而是位于全局属性表中:blogs.msdn.com/b/vsproject/archive/2009/07/07/…
    • 我想知道没有人只告诉过默认目录。所以,这里是<root dir of Visual Studio>/VC/include/。我的工作 PC 中有一个来自以前用户的 MSVC,但我使用的是 GNU/Linux,并且不想启动 VC 只是为了满足我查看 Microsoft® 标头的好奇心。顺便说一句,关于我的好奇心:我发现 MSDN 甚至不知道它自己的标题名称! IE。他们提到了Iphlpapi.h,但是这样的文件不存在,它的名字是iphlpapi.h,或者IPHlpApi.h(两者都有)!大声笑
    • 选项“VS > 工具 > 选项 > 项目和解决方案 > VC++ 目录”现已弃用。
    【解决方案2】:

    实际上在我的带有 Visual Studio 2017 社区的 Windows 10 上,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>。版本号可能因您的软件而异。

    希望这会有所帮助。

    【讨论】:

    • 这是对OP最直接的回答。尽管其他答案谈到了其他问题,但这应该是公认的答案。
    • @linrongbin 我正在清理由最新的 VS Build Tools 安装创建的目录。你是对的第一个。但是我没有选中 Windows SDK 选项,这实际上意味着我没有 C 头文件,这反过来意味着 BuildTools 中的 C++ 工作流不支持 C。
    【解决方案3】:

    如果项目附带 Visual Studio 项目文件,则应该已经配置为为您查找标头。如果没有,您必须将包含文件目录添加到项目设置中,方法是右键单击项目并选择属性,单击“C/C++”,然后将包含包含文件的目录添加到“附加包含目录”编辑框。

    【讨论】:

      【解决方案4】:

      Visual Studio 2015 社区中似乎存在错误。对于 64 位项目,找不到包含文件夹,除非它位于 win32 位配置其他包含文件夹列表中。

      【讨论】:

      • 你有这个错误的链接或参考吗?
      • 不是我自己发现的,没有报告
      • 这个bug在Visual Studio Community 2019中仍然存在,我需要先将包含路径添加到win32配置中,然后再次添加到x64配置中,应用更改,然后它会工作。之后,回去删除win32中的路径还是可以的。
      【解决方案5】:

      试图将此作为评论添加到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 推荐的。)

      【讨论】:

        【解决方案6】:

        存在一个较新的问题,问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

        【讨论】:

        • 如果只有标题中有“C++”,并承认在 32 位路径部分寻找 64 位路径的错误
        • @Markus 其他编程语言也需要包含路径,我认为我们没有 500 个具有相同答案的不同问题实际上很好,唯一的区别是标题中的编程语言名称.
        • 我不同意,因为每种 IDE 和语言都有自己的方式,所以不可能对所有语言都有一个答案。 OP 已更新问题以包括 C++。如果有一种特殊的语言没有适用于它的答案,你怎么知道?
        【解决方案7】:

        在options“cwd”中提到的目录中查找文件,您可以将所有子目录包含在一个路径下,如下所示。

        • 它将创建一个输出文件。
        • 它将把所有文件一起编译到cwd指定的目录下

        项目结构:

        模块测试

        -header_files
            - util.h
        -source_files
            - util.c
            - main.c
        

        【讨论】:

          猜你喜欢
          • 2010-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多