【发布时间】:2018-07-11 07:21:14
【问题描述】:
当我处理我的个人 C 和 C++ 项目时,我通常将 file.h 和 file.cpp 放在同一个目录中,然后 file.cpp 可以使用 #include "file.h" 指令引用 file.h。
但是,通常会发现库和其他类型的项目(如 linux 内核和 freeRTOS),其中所有.h 文件都放在include/ 目录中,而.cpp 文件保留在另一个目录中。在这些项目中,.h 文件也包含在 #include "file.h" 中,而不是我希望的 #include "include/file.h"。
我对这一切有一些疑问:
- 这种文件结构组织有什么优势?
- 为什么
include/中的.h文件包含在#include "file.h"中,而不是#include "include/file.h"?我知道真正的诀窍是在某个 Makefile 中,但这样做真的比(在代码中)明确我们要包含的文件实际上在include/目录中更好吗?
【问题讨论】:
-
如此组织时,
include是包含的根,因此它不是实际包含名称的一部分。通常 - 但并非总是如此 - 您还会在src目录中拥有源文件,顺便说一句。 -
这种方式更灵活,你可以改变头文件的位置,只需要在一个地方更新这个事实,想象一下必须检查内核中所有使用某些文件的文件是多么疯狂库,如果您决定更改目录结构并且必须一一修改包含。这也节省了大量的打字时间。
-
你能想象如果必须在不同的目录中找到每个系统头文件会是什么样子吗?混乱并没有开始描述它。这就是为什么它们被收集到一个或极少数目录中的原因。