0

我拥有的项目的物理文件结构类似于:

  • 源文件夹
  • 引擎
    • 文件夹 1
    • 文件夹 2

等等

我在“Source”中有一些文件,在“Engine”中有一些文件,在“Engine/Folder1”中有一些文件,等等。

在我的项目中,我已经完成了所有配置-> 源目录并包括源、引擎、引擎/Folder2 等。但是,当我尝试包含“Foo.h”或来自不同的文件夹。有没有办法做到这一点,所以我不必在所有东西前面都有 ../Folder1/ ?

4

2 回答 2

1

有没有办法做到这一点,所以我不必在所有东西前面都有 ../Folder1/ ?

就在这里。答案取决于几个因素,我相信我会错过一些。

检查以下内容:

  • 在编译器设置中检查“C/C++”下的“附加包含”
  • 还要检查“VC++”中“包含目录”的值
  • 检查“C/C++/预处理器”中“忽略标准包含路径”的设置
  • 检查您的预编译头设置
  • 检查源文件中的“#define”/“#undef”和编译器设置
  • 检查您的项目可能正在使用或继承的属性表

如果您使用“foo.h”(而不是 <foo.h>),预处理器将首先在您的项目特定文件夹中查找,最后在 IDE 特定文件夹中查找。如果您使用 <foo.h> 它首先从标准包含文件夹开始,例如标准运行时库所需的那些。

当文件使用“../foo.h”时,它的路径相对于包含该文件的文件的位置。可能会有棘手的例外情况。

还有很多事情可以影响预处理器如何找到它的包含路径。如果您不确定预处理器对特定文件做了什么,您可以通过在预处理器设置中打开“预处理到文件”来使预处理器输出可见。该文件向您显示了在预处理器完成之后和编译器开始工作之前文件的源代码。

有了更多的经验,尤其是文件夹/项目结构的明确策略以及如何包含文件,整个事情变得更加容易。例如,确保您将“#pragma once”作为每个包含文件中的第一个非注释行。

我希望这能给你一些关于下一步的想法。祝你好运!

于 2010-08-10T10:53:29.710 回答
0

我认为这是一个很好的做法:

  • 当包含的文件路径不需要使用“..”时,使用相对路径
  • 当它需要使用“..”时,使用绝对路径(即相对于源文件的根文件夹。

要使用绝对路径,请将根源文件夹添加到包含目录列表(相对于项目的文件位置)。

于 2010-08-10T10:56:04.393 回答