包含路径如何在 Visual Studio 中工作?

Posted

技术标签:

【中文标题】包含路径如何在 Visual Studio 中工作?【英文标题】:How do include paths work in Visual Studio? 【发布时间】:2011-02-10 05:02:15 【问题描述】:

Visual Studio 让我发疯,我怀疑我做错了什么。

这就是我所做的:我很久以前安装了 Visual Studio (Pro '08),我安装了 Windows SDK (Win 7 x64),有人给我发邮件给我一个项目,它无法构建。

总是找不到windows.h。虽然在每个项目的项目设置中包含C:\Program Files\Microsoft SDKs\Windows\v7.0\Include 很容易,但我觉得这可能不是正确的方法。有没有办法让 Visual Studio 全局感知这些文件? 我还尝试将上述目录包含在 path 变量中,但这并没有改变任何东西。

另外,它会在同一目录下随机找到 windows.h 而不是 winresrc.h。

编辑: 这是我机器的问题。不知何故,Visual Studio 认为我的 Windows SDK 放错了地方。请参阅已接受的答案和 cmets 以进行修复。

【问题讨论】:

您应该取消选择我的可悲过时的答案,并改为接受现代答案之一。 【参考方案1】:

此答案仅适用于 Visual Studio 的旧版本 - 请参阅现代版本的最新答案。

您可以在此处设置 Visual Studio 的全局包含路径:

Tools/Options/Projects and Solutions/VC++ Directories/Include files

【讨论】:

它列出了$(WindowsSdkDir)\include,所以我猜$(WindowsSdkDir) 是错误的。如何检查或更改它? 它引用了HKEY_CURRENT_USER\Software\Microsoft\Microsoft SDKs\Windows 中的注册表项CurrentInstallFolder,其中列出了一个不存在的目录。解决了我的问题。 @BastiBechtold 它不存在,因为它是由 vcvarsall.bat 或 Visual Studio 在项目构建期间设置的。 看我的回复,这个菜单现在已经被 VS 2012 弃用了。 @ChristianSeverin:仍然有人使用旧版本的 Visual Studio,这个答案与他们有关。正确的解决方法是让 bastibe 接受我要求他们这样做的其他答案之一。【参考方案2】:

您需要确保并具备以下条件:

#include <windows.h>

不是这个:

#include "windows.h"

如果这不是问题,请查看RichieHindle's response。

【讨论】:

【参考方案3】:

要成功使用 Windows SDK,您不仅需要使包含文件可用于您的项目,还需要库文件和可执行文件(工具)。 要设置所有这些目录,您应该使用WinSDK Configuration Tool。

【讨论】:

链接已损坏。 @Charles 和 Windows 一样 :) 几年前我搬到了 Linux。 LOL 说得很好。谢谢彼得。虽然这些天我对“Windoze”并不那么苛刻。他们似乎正在寻找自己的方式。奇怪的是,这个行业怎么能把一个并不特别的人变成 StarBoy,但每隔一段时间,当社会确实让某人成为 StarBoy 时,他们就会变成那些裤子。我不想说微软是一个完美的例子,一个人成长为一些不值得的粉丝扔给他们的裤子,但我个人确实发现微软在改进,即使他们偶尔会后退或横向或离开页面。跨度> 【参考方案4】:

@RichieHindle 解决方案自 Visual Studio 2012 起现已弃用。正如 VS 工作室提示现在所述:

VC++ 目录现在可用作默认添加到所有项目的用户属性表。

要设置包含路径,您现在必须右键单击项目并转到:

Properties/VC++ Directories/General/Include Directories

截图:

【讨论】:

这适用于单个项目。如何为解决方案中的所有项目设置默认路径? 荒谬的是,这个有用的功能已被删除,取而代之的是如此复杂的噩梦...... @TheSHEEEP:如果您不了解需要解决的问题,那简直是荒谬的。在 VS 2012 之前,团队中的每个开发人员都必须设置 他们的 IDE 来编译任何给定的解决方案。将包含目录移动到项目配置中可以为团队中的每个人解决这个问题。坦率地说,property sheets 是一种非常灵活且易于管理的方式来设置共享项目配置。 @IInspectable 好吧,自从最新的 Windows 10 以来,管理环境变量不再是一团糟,所以我会给你。不过,我不会继续和你争论,因为任何不同意你意见的人一定是“不理解”的白痴。 @TheSHEEEP:假设您正在处理一个使用 3rd 方库的项目。当您使用该库的最新版本开发新功能时,您还需要维护使用该库的先前版本的先前版本。如果您对该库位置使用全局设置,则每次来回切换时都必须更改它。而且您的构建环境永远不能同时构建 2 个不同的版本。而且您永远无法同时打开 2 个不同的版本。现在您正在使用数十个库。这没有规模(事实,而不是意见)。【参考方案5】:

如果您只是尝试更改项目的包含路径而不是所有解决方案 然后在 Visual Studio 2008 中执行以下操作: 右键单击解决方案导航器中的项目名称。从弹出菜单中选择属性。在属性页对话框中选择 Configuration Properties->C/C++/General。单击“其他包含文件”标签旁边的文本框并浏览到相应的目录。选择确定。

令我恼火的是,对最初提出的问题的某些答案不适用于所提到的 Visual Studio 版本。

【讨论】:

【参考方案6】:

要恢复 VisualStudio 2013 和 2015 中的工作解决方案:

仅向当前项目添加包含路径

Solution Explorer(VisualStudio-mainwindow 的一个调色板窗口)中,打开项目的快捷菜单并选择 Properties,然后在 Property Pages 对话框的左窗格中展开配置属性并选择 VC++ 目录。 可以在此处指定其他包含路径或库路径。

这是 Stackunderflowuser1741137 在上面的答案中所说的。 这也是微软在MSDN 中解释的内容。

自动为每个新项目添加包含路径

这是一个问题,Jay Elston 在上面的评论中提出了什么问题,在我看来这是一个非常明显和紧迫的问题,而这里似乎还没有答案。

在 VisualStudio 中存在常规方法(请参阅CurlyBrace.com),根据我的经验,哪些方法无法正常工作。从某种意义上说,它只工作一次,此后,它不再可扩展,也不再可移动。 Steve Wilkinson 在 *** 的另一个密切相关的线程中的方法,在“程序文件”目录中编辑 Microsoft-Factory-XML-file 可能是一个冒险的黑客攻击,因为微软不希望在那里遇到一些外国的东西。效果可能无法预测。好吧,我宁愿认为它的风险不大,但无论如何,这是让 VisualStudio 工作的最佳方式,至少对其他人来说是难以理解的。

与之相比,工作正常的是编辑相应的用户XML文件:

C:\Users\UserName\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props

或/和

C:\Users\UserName\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props

例如:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>C:\any-name\include;$(IncludePath)</IncludePath>
    <LibraryPath>C:\any-name\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

目录“C:\any-name\include”将添加到当前包含路径,目录“C:\any-name\lib”添加到库路径。在这里,我们可以在扩展和删除意义上对其进行编辑,然后将其全部删除,从而删除标签的全部内容。

这就是 VisualStudio 本身的原因,它以 CurlyBrace 所描述的常规方式进行。如前所述,此后不再以 CurlyBrace 方式 进行编辑,但在 XML 编辑方式中它是可编辑的。

如需了解更多信息,请参阅 Brian Tyler@MSDN-Blog 2009,虽然内容不是很新鲜,但始终是 Microsoft 链接的内容。

【讨论】:

我尝试了这个解决方案并遇到了一个问题:$(VC_IncludePath)$(WindowsSDK_IncludePath) 从包含目录中消失了。 这个问题可以通过将$(VC_IncludePath);$(WindowsSDK_IncludePath) 添加到IncludePath 标记中来部分解决,但这个解决方案看起来很脏。【参考方案7】:

此答案对使用非标准 IDE(即 Qt Creator)的人很有用。

至少有两种非侵入式方法可以通过环境变量将额外的包含路径传递给 Visual Studio 的cl.exe

INCLUDE 环境变量设置为;-分隔的所有包含路径列表。它覆盖所有包含,包括标准库。 不推荐。CL 环境变量设置为以下值:/I C:\Lib\VulkanMemoryAllocator\src /I C:\Lib\gli /I C:\Lib\gli\external,其中/I 键的每个参数都是附加的包含路径

我成功使用了最后一个。

【讨论】:

使用 INCLUDE 环境变量不适用于 Visual Studio。在Remarks to #include,您会发现:“在 Visual Studio 开发环境中,INCLUDE 环境变量被忽略。改用项目属性中为包含目录指定的值。

以上是关于包含路径如何在 Visual Studio 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的存储过程在我的 Visual Studio 项目中工作?

如何创建在 Visual Studio Code 中工作的 Java / Maven 项目?

我的 Visual Studio 2012 程序在 Debug 中工作,在没有调试的情况下发布 (ctrl + F5) 但不是发布。我该如何解决?

Visual Studio 中的相对路径

代码在调试中工作并从 Visual Studio 运行,但是发布模式会出错

向量查找函数在 Visual Studio 中工作但在 GCC 中不工作