【问题标题】:Visual Studio does not honor include directoriesVisual Studio 不支持包含目录
【发布时间】:2010-09-24 20:13:05
【问题描述】:

我曾多次遇到这种情况,Visual Studio 在 libheader source files 时不遵守 附加包含目录。例如,我刚刚下载了 MyGUI 源代码并确保包含目录正确。我什至把它们放到绝对路径下,Visual Studio 仍然抱怨找不到特定的头文件。

有没有人在项目中遇到过同样的事情,如果有,有没有解决这个问题的方法?Blockquote

编辑:我很抱歉不能完全解释。我知道库和源文件有不同的包含目录。我收到的项目具有正确的附加包含目录和附加库目录的目录路径,但 Visual Studio 仍然无法正确识别它们。我可以右键单击并在 Visual Studio 中打开头文件,但编译时仍然抱怨找不到所需的头文件。我经常依赖自己编写的框架制作项目,因此我非常熟悉如何设置依赖项。然而,这似乎是第二次发生这种情况。我不记得上次我试图编译哪个 3rd 方项目,但 Visual Studio 只是拒绝相信 Additional Include Directories 路径是它应该查找头文件的位置。我不确定如何提供这个特定库 (MyGUI) 的完整详细信息,但我可以将您指向可以下载它的网站以尝试查看它是否能够找到项目中包含的头文件(如果它没有编译,那很好,这可能是因为额外的依赖关系,但它至少应该能够在公共文件夹中找到文件,尤其是当我将绝对路径放在 Additional Include Directories 中时)

【问题讨论】:

  • 我从来没有(从版本 6 开始)无法正确配置 Visual Studio 以接受头文件和/或库文件。请发布您的库的目录结构以及您如何在 Visual Studio 中配置项目。
  • 我一直在浪费时间试图让 Visual Studio 识别另一个目录中的头文件。它显然在那里;我可以在解决方案资源管理器中右键单击它并打开它。但是我的#include 带有红色下划线,上面写着“无法打开源文件”。该目录包含在 VC++ 目录和附加包含目录中,具有完整、明确的路径。多么错误的实现!真是浪费我的时间!
  • 通过在#include 语句中包含整个路径来编译主文件,但现在它抱怨第一个头文件包含的头文件。改变几十个头文件以使用完整路径是不可行的!该死,我讨厌微软!
  • 终于想出了一个解决方法:从 x86 更改为 x64 并且 #include 语句开始工作。这是违反语言规则的!!字长应该对正确的程序没有任何影响。单凭言语无法表达我的厌恶。
  • 好吧,我的错:属性配置设置为 x64,但我的程序配置是 x86,所以没有看到我的更改。我仍然认为属性配置不默认为与程序相同的配置是另一个问题。

标签: visual-studio visual-studio-2008


【解决方案1】:

这发生在我身上一次。事实证明,Debug 与 Release 构建的不一致。当我修改一个构建时,正在编译另一个构建。请使用相同的包含文件夹设置两个版本,看看它是否有效。祝你好运。

【讨论】:

  • Win32/x64平台也发生在我身上!
  • 实际上,修复这个错误取决于像 Francesco Dondi 所说的那样设置 Win32/x64 平台,而不是调试与发布版本 - 在 Visual Studio 2015 中测试
  • 此外,如果您在同一解决方案中有其他项目,则使“其他包含目录”保持一致可能会有所帮助。这就是在 Visual Studio 2015 中对我有用的方法。我在同一个解决方案下有两个项目(一个用于 DLL,一个用于静态库),DLL 是主要项目。仅仅更改静态库项目中的包含目录是不够的,我还必须更改主项目的设置才能使其正常工作,即使我只是尝试构建静态库项目。
【解决方案2】:

我发现(偶然发现)了解决方案(我认为)。它与操作系统施加的字符限制有关。虽然限制应该是 260,但对我来说它落在 150 以下,see this discussion and links to it。我将文件下载并解压缩到C:\Users\MyUserName\My Documents\Downloads\Downloads From Chrome\MyGui3.0...[等等]。我很久以前就学会了不要尝试在这么长的路径下编译项目,但这一次它完全让我忘记了,因为 VS 根本没有给我警告并指出我错误的方向。无论如何,将项目剪切并粘贴到D:\ 解决了这个问题。 在有人确认之前,我不会勾选答案。

【讨论】:

  • 有谁知道VS是否对这些路径的长度进行了限制,以确保在调用cl.exe时,命令行不会太长?
【解决方案3】:

我有同样的问题:即使我添加了额外的包含目录,也找不到 .lib 文件。

Additional include directory in Visual studio 2015 doesn't work 的回答中,我尝试了:

删除.suo文件并重启VS

然后它对我有用。

【讨论】:

  • 删除 .suo 文件并重新启动 VS-- 不适合我。
  • 我不希望这是解决方案...但它确实有效(好吧,我对整个 .vs 目录进行了核对)
  • 与@MikeVittiglio 相同:删除整个 .vs 目录解决了我在“其他包含目录”中放入的文件夹中的“找不到包含”错误
【解决方案4】:

我也有这个问题。就像 sam 所说的 - 这个包含框架路径的字符串值必须与 Debug 和 Release 配置相同。所以最好的方法是在输入之前从项目属性窗口顶部的两个上下文清单中选择“配置:所有配置”和“平台:所有平台”,或者从 Windows 资源管理器地址栏中复制。

【讨论】:

    【解决方案5】:

    我刚刚花了几个小时来解决编译器中失败的#include 路径、编译器和智能感知之间的不一致问题。

    我最终发现,在 *.cpp 文件的属性中——不是项目,而是单个 *.cpp 文件——“附加包含目录”属性是空白的。我必须将其显式设置为“从父级或项目默认值继承”——对话框左下角附近有一个用于编辑目录路径的复选框。

    我从另一个项目中复制了这个文件并使用“添加 > 现有项目...”将它添加到当前项目中。我的假设是“现有项目”过程可能跳过了“新项目”通常会执行的属性初始化步骤。但我只是通过添加另一个现有的和一个新的来测试这个假设。这两个文件的属性都设置为从项目继承,所以我没有解释为什么我的问题文件最初没有设置为继承。

    无论如何......经过一番挫折,找到并修复了那个。

    【讨论】:

      【解决方案6】:

      你能详细说明一下吗?如果我记得,Visual Studio 中至少有两个地方可以配置:

      1. 每次安装:Tools/Options/Projects and Solutions/VC++ Directories)
      2. 每个项目:Project/Properties/Configuration Properties/"C/C++"/General/Additional Include Directories

      如果您要为每个项目添加包含目录(#1),我认为您是这样,然后尝试从另一个项目中包含,这显然行不通。尝试在每个安装级别添加它们,看看它是否有效。

      此外,这可能听起来很愚蠢/过于简单,但请确保路径正确(即复制粘贴到资源管理器的路径栏中并查看头文件是否在该文件夹中)。

      【讨论】:

      • 实际上,我建议不要在整个环境中添加随机库。一个更简洁的解决方案是只将所需的目录添加到两个项目中 - 您并不真的希望每个库都在您的环境中徘徊。
      • 这实际上取决于许多因素。如果您说的是添加 Qt - 那么全局将是明智的,因为您很有可能在同一台机器上的许多项目中使用它。
      • 请参阅我的原始问题中的编辑以进行澄清
      • 无论如何,您都不应该在项目中使用绝对文件路径 - 我们使用相对文件路径 + Visual Studio 宏,这些宏扩展为可以为客户端设置配置的本地路径。 @Lee:至于 Qt 和类似的库,我同意。但是这个讨论偏离了这个问题的主题。
      • @AndréCaron 如果你想看stackoverflow.com/questions/13829163/…,我刚刚发布了新帖子。我已经花了几个小时来解决这个问题......
      【解决方案7】:

      如果 lib 文件是指库 (.lib) 文件,则目录位置不是通过 C/C++/General/Additional Include Directories 而是通过 Linker/General/Additional Library Directories 指定的。

      如果您考虑一下,这是合乎逻辑的。 C/C++ 选项都是编译选项,涉及编译 .cpp 和 .h 文件的设置。链接器选项都是链接选项,涉及链接 .obj 和 .lib 文件的设置。

      【讨论】:

      • 我很抱歉不能完全解释。我知道库和源文件有不同的包含目录。我收到的项目具有附加包含目录和附加库目录的正确目录路径,但 Visual Studio 仍然无法正确识别它们。我可以右键单击并在 Visual Studio 中打开头文件,但编译时仍然抱怨找不到所需的头文件。
      • 我以前见过 - Visual Studio 的右键单击会打开与编译中使用的不同的包含。这通常发生在构建失败时。成功构建后,通常不会发生这种情况。我会在你的包含路径中寻找同名的包含文件,甚至是那些给你问题的文件(可能是包含的包含)。还可以尝试将完整路径放在#include 语句中,看看是否能让你更进一步。
      【解决方案8】:

      我在我的 c++ 项目中遇到了同样的症状。从标题导航到标题很好,但是在切换到标题的源文件(比如说foo.cpp)之后,导航到该源文件中的#include <bar.cpp> 失败。我收到以下错误:

      在当前源文件的目录或构建系统路径中找不到文件“bar.cpp”。

      经过研究,我注意到错误中给出的系统构建路径未使用项目的包含路径进行扩展。换句话说:IntelliSense 不知道源文件 (foo.cpp) 是项目的一部分,因此它没有使用项目的包含路径来搜索 #include <bar.cpp>

      我的解决方法是创建一个文件intelliSense.cpp(文件名无关紧要),它是项目的一部分,但从构建中排除。此文件包含每个源文件的包含。例如:

      #include <foo.cpp>
      #include <bar.cpp>
      ...
      

      这样,IntelliSense 知道这些源文件是项目的一部分,因此将使用项目的包含路径来解析这些源文件中的 #includes

      【讨论】:

        【解决方案9】:

        对我来说,问题是 .vcxproj 项目文件是只读,在我将目录添加到“其他目录”后,项目文件实际上并没有改变。我很惊讶 VS 没有抱怨这个文件是只读的。

        所以在我使该文件可写后,我就可以编译我的项目了。

        【讨论】:

          【解决方案10】:

          这是 vs2015 中的另一个“我也有同样的……”。

          对我来说,活动设置还取决于“解决方案配置”和“解决方案平台”。这使得 4 个设置都应该是相同的。

          这解决了我的问题。

          【讨论】:

            【解决方案11】:

            我意识到这个问题此时已经有 10 多年的历史了,但我也刚刚遇到了这个问题,没有一个答案适合我的情况。在我的 IDE (VS 2019) 玩了几分钟后,我意识到我使用的 cpp 文件的平台设置为 Win32,但我尝试使用的库是为 x64 构建的。

            正如其他人所说,请确保您的项目配置设置为 - “所有配置”当您将必要的路径添加到您的项目时,因为这也可能是一个问题。我想我的问题不会那么普遍,但我认为值得分享。我希望这对将来的其他人有所帮助。

            【讨论】:

              【解决方案12】:

              前面没有提到的另一个可能的原因:确保在多项目解决方案中配置正确项目的属性。

              我的问题是我有两个项目的解决方案,每个项目都使用包含包含的相同文件。事实证明,我只为两个项目之一正确配置了“附加包含目录”,而完全忘记了另一个。当然错误消息是指出只有第二个项目而不是第一个项目有问题。

              【讨论】:

                猜你喜欢
                • 2015-11-19
                • 2018-05-05
                • 2012-11-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-10-23
                • 1970-01-01
                相关资源
                最近更新 更多