C++ 如何在VisualStudio中包含子目录?

C++ 如何在VisualStudio中包含子目录?,c++,visual-studio,visual-studio-2005,include,C++,Visual Studio,Visual Studio 2005,Include,我必须包括许多头文件,这是在不同的子目录。在Visual Studio(我使用的是2005版)中有没有办法设置一个包含路径,以便Visual Studio在子目录中搜索头文件?从设计角度来看,在Visual Studio设置中设置文件夹搜索路径以修复包含问题通常不是一个好主意。您的代码对于具有不同目录布局的不同机器的可移植性较差。 我的建议是确定代码的组织结构,以便子目录(相对于包含代码)的相对路径是固定的: 将“基本文件夹”添加到项目中(项目属性->配置属性->C/C++->附加包含目录,“

我必须包括许多头文件,这是在不同的子目录。在Visual Studio(我使用的是2005版)中有没有办法设置一个包含路径,以便Visual Studio在子目录中搜索头文件?

从设计角度来看,在Visual Studio设置中设置文件夹搜索路径以修复包含问题通常不是一个好主意。您的代码对于具有不同目录布局的不同机器的可移植性较差。

我的建议是确定代码的组织结构,以便子目录(相对于包含代码)的相对路径是固定的:

  • 将“基本文件夹”添加到项目中(项目属性->配置属性->C/C++->附加包含目录,“附加包含目录”)
  • 将子目录添加到#include语句中,即#include“subdirectory/somefile.h”

这样做还有一个额外的好处,就是可以看到解决方案中的哪个文件夹包含该文件—这通常是在您尝试查找路径或试图找出文件的用途时有用的信息。

我相信对包含文件使用递归搜索会导致比以错误文件的形式解决问题多得多的问题或者包含错误的版本。毕竟,在设置项目时必须定义一次正确的目录。

我们还没有找到在Visual Studio中设置递归文件夹搜索的方法(尽管Xcode在设置和使用它们方面没有问题)。我们要做的是列出文件中的所有目录,并在C/C++命令行中指定该文件其他选项:

@“IncludeFolders.rsp”


使用递归搜索很少会出现问题,尽管意外包含`/''确实会让速度慢一点。

我发现,在大多数情况下,包括在MSVC中,我可以通过使用SUBST命令的轻微手动技巧来缩短路径长度。我将展示和缩短缩短默认继承的C++包含路径,但是您将为您的项目相关的包含路径执行此操作。 首先像这样创建一个或多个批处理文件(并从Windows资源管理器或命令行运行):

您可以为较长的路径创建许多这样的路径。在上面的例子中,我只是缩短了MSVC默认使用的标准继承路径。顺便说一句,Subst命令在没有管理权限的情况下工作,但不要踩到现有的物理或映射驱动器号(我不确定会发生什么——我现在不想测试它)

此步骤是可选的。我在MSVS 2010+中添加了一个自定义属性表顺便说一句,如果您不知道自定义属性表,您应该。请参阅。 查看“其他窗口”属性窗口,在属性管理器中的项目上单击鼠标右键,添加新的项目属性页。在“用户宏”下,添加一个宏,例如MyProjectIncludePath,并将值(在本例中)设置为

--本例中只有49个字符,比默认的

$(VC_IncludePath); $(WindowsSKD_IncludePath)
在宏扩展时转换为

C:\Program Files (x86)\Windows Kits\8.1\Include;C:\Program Files (x86)\Windows Kits\8.1\Include\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt
根据我的统计,默认值是270个字符——即超过260个字符——有人能解释一下吗

在项目的属性页(即不是自定义属性页)中,在我的示例中,我转到配置属性VC++目录,并将Include Directories值更改为$(MyProjectIncludePath),但实际上,您将转到(在自定义属性页中,如果您创建了一个)C/C++-General并添加$(MyProjectIncludePath)添加到其他包含目录


除了继承的270个字符的路径外,我还能够在附加的Include目录下添加一些合理长度的路径。可能附加的Include目录有自己的长度限制(?)。

在Include路径中使用它来包含所有子目录

${workspaceFolder}
${workspaceFolder}/**

错误。递归搜索是经典Macintosh开发环境(如CodeWarrior)中的默认搜索。它们有一个简单的约定,即在(目录)周围使用paren跳过自动包含,因此您必须添加特定路径。这使包含列表非常简单,我在Windows上总是错过它。非常好:^)
C:\Program Files (x86)\Windows Kits\8.1\Include;C:\Program Files (x86)\Windows Kits\8.1\Include\atlmfc\include;C:\Program Files (x86)\Windows Kits\8.1\Include\um;C:\Program Files (x86)\Windows Kits\8.1\Include\shared;C:\Program Files (x86)\Windows Kits\8.1\Include\winrt
${workspaceFolder}
${workspaceFolder}/**