【问题标题】:How to #include files in separate directories using different IDEs?如何使用不同的 IDE #include 不同目录中的文件?
【发布时间】:2011-12-18 02:48:49
【问题描述】:

我正在使用 MacOS X 上的 Xcode 开发 C++ 项目,现在开始使用 Code::Blocks IDE 将其移植到 Linux。

我的许多源文件位于不同的目录中,我遇到了包括它们在内的问题。

这里是这个问题的一个例子:

folder1/foo.h

folder2/dog.h

foo.h includes dog.h with: `#include "dog.h"`

如果两个文件在同一个项目中,它在 Xcode 上工作正常,但如果我在 Code::Blocks 中尝试它,它会出错。

我可以通过将代码更改为使用相对包含路径来解决 Code::Blocks 中的这个问题,例如:

#include "../folder2/dog.h"

不幸的是,这样做会使 Xcode 无法找到该文件。

如何解决这个问题,以便在多个 IDE 中编译相同的代码?我想避免将所有源代码放在同一个文件夹中。我应该使用类似于以下的预处理器语句:

#if XCODE
#include "dog.h"
#else
#include "../folder2/dog.h"
#endif

【问题讨论】:

  • 进入 Code::blocks 选项并设置包含目录。
  • @EthanSteinberg 设置完成后,我是否可以直接包含 #include "dog.h" 之类的文件?
  • 是的。这是设置包含目录的要点之一。
  • @Dmitri 它没有。我认为它所做的是将项目中的所有标题复制到一个目录中并在那里编译表单。

标签: c++ c xcode include codeblocks


【解决方案1】:

重新排列你的结构,让一个项目只有一个公共包含目录:

/project/
        /src/*.cpp
        /include/*.hpp
                /folder1/dog.hpp
                /folder2/cat.hpp

现在说#include <config.hpp>#include <folder1/dog.hpp> 等,并添加到您的编译器标志:

-I ${PROJECT_DIR}/include

【讨论】:

  • 如果您希望头文件与相应的源文件相邻怎么办?如果 IDE 没有 -I 设置怎么办?
  • @Oli 任何体面的 IDE 都会有一些方法来指定在哪里查找包含头文件。如果不明确支持,则只需手动将其添加为额外的编译器开关。
  • +1 用于重组源文件。这就是我通常的做法,也是许多开源项目遵循的惯例。
  • @OliCharlesworth:如果 IDE 不允许您基于每个项目配置编译器标志,我会说是时候更改 IDE!
  • @Kerrek:确实。但是 OP 似乎在询问是否有一种独立于任何特定 IDE 的方法来做到这一点。
【解决方案2】:

不幸的是,给定的编译器/IDE 如何定位依赖项完全是特定于编译器/IDE 的。没有办法以所有开发环境都尊重它的方式来安排它。

我不知道 Xcode 或 Codeblocks,但我确信一定有一些项目配置可以控制它们在哪里查找#include 文件。

【讨论】:

  • 所以您会建议通过设置 IDE 特定的包含路径来包含所有文件夹?
  • @Justin - 其他 IDE 也可以将文件添加到项目中。在这种情况下,它就像在 Xcode 中一样工作。如果没有,您可能可以添加包含目录的列表。
猜你喜欢
  • 2012-05-28
  • 2018-11-14
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多