C ++需要包含多个目录的头文件

时间:2016-06-09 19:06:19

标签: c++ header-files organization code-organization

我在2D terraria / Minecraft风格的游戏中有以下文件夹结构:

src/
- Backend/
- - Vector.hpp
- World/
- - Elements/
- - - Mobs/
- - - - BaseMob.cpp

正如您所猜测的,每个目录中都有更多的源文件。在BaseMob.cpp内,我需要访问src/Backend/Vector.hpp是否有更简洁的方式来编写#include "../../../Backend/Vector.hpp"(即。#include "/Backend/Vector.hpp")或更好的方法来整理源文件夹中的文件?

以下是有关源文件夹中实际内容的更多信息(排除了大多数.cpp个文件):

Backend/ # Anything specific to a particular platform
- Vector.hpp
- Graphics.hpp
World/ # Anything about the whole game's world
- Elements/
- - Mobs/
- - - BaseMob.hpp # Polymorphic base class
- - - MobHandler.hpp # Manages all mobs in world
- - - PlayerMob.hpp
- - - WaterMob.hpp
- - Block.hpp # Defines all possible blocks
- - Inventory.hpp
- - Furnace.hpp
- World.hpp
- WorldRenderer.hpp # Makes calls to Backend/graphics.hpp
main.cpp

2 个答案:

答案 0 :(得分:4)

您可以考虑重新组织包含文件夹。这是一种可能的解决方案,但可能还不够:当您开始使用第三方库时,您将无法做到这一点......所以您需要一种更好的方法来解决这个问题。

干净的方法是将所需的文件夹(存储所需的文件夹的文件夹)添加到编译器使用的“包含路径”中,以便它可以找到它们。

然后,代替#include "World/Elements/Mobs/BaseMob.hpp",您将World/Elements/Mobs添加到包含路径,然后只需#include "BaseMob.hpp"

如果您使用其他编译器/ IDE,则必须提供一个选项来执行此操作。

答案 1 :(得分:0)

我建议不要在#include语句中放置路径。如果文件移动,您将不得不更改所有源。

IMO,更好的方法是告诉编译器在哪里查找包含文件。常见的命令行编译器选项是“-I”(大写字母i)。在IDE中,可能存在一个设置,您可以在其中列出要搜索的所有路径。

通过告诉编译器在哪里搜索,您可以在任何地方包含文件,并且可以移动,而不必更改源代码。