如何在Visual Studio中包含子目录?

时间:2008-12-04 09:09:23

标签: c++ visual-studio visual-studio-2005 include

我必须包含许多头文件,这些头文件位于不同的子目录中。 Visual Studio中是否有一种方法(我使用的是2005版)设置一个包含Visual Studio将搜索头文件的子目录的包含路径?

5 个答案:

答案 0 :(得分:19)

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

我的建议是解决你的代码组织,以便修复子目录的相对路径(相对于你的包含代码):

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

这还有一个额外的好处,就是能够看到解决方案中的哪个文件夹包含文件 - 当您试图找到解决方法或尝试弄清楚文件的用途时,这通常是有用的信息。

答案 1 :(得分:6)

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

@ “IncludeFolders.rsp”

我们很少发现使用递归搜索的问题,虽然偶然包含“/”确实会使事情变慢一些。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

MDrive.bat:
subst M: /D
subst M: "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC"

WDrive.bat:
subst W: /D
subst W: "C:\Program Files (x86)\Windows Kits\8.1\Include"

... This is just and example.  You would do this for your
    project related include directories.

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

此步骤是可选的。我在MSVS 2010+中添加了自定义属性表。 BTW,如果您不了解自定义属性表,请参阅Property Pages (Visual C++)查看 - 其他Windows属性窗口,右键单击属性管理器中的项目,添加新项目属性表。在用户宏下,添加一个宏,例如 MyProjectIncludePaths 并将值(在此示例中)设置为

M:; M:\atlmfc\include; W:\um; W:\shared; W:\winrt

- 此示例中只有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 ++目录并更改了将目录值包含在 $(MyProjectIncludePaths)中,但在实践中,您将转到(在您的自定义属性表页面中,如果您创建了一个) C / C ++ - General 并将 $(MyProjectIncludePaths)添加到其他包含目录

除了继承的270个字符路径之外,我还可以在 Additional Include Directories 下添加一些合理长度的路径。也许附加包含目录有自己的长度限制(?)。

答案 4 :(得分:0)

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

${workspaceFolder}
${workspaceFolder}/**