When I work on my personal C and C++ projects I usually put file.h
and file.cpp
in the same directory and then file.cpp
can reference file.h
带有 #include "file.h"
指令。
但是,通常会发现所有 .h
文件都放在 include/
目录中的库和其他类型的项目(如 linux 内核和 freeRTOS),而 .cpp
文件保留在另一个目录中。在这些项目中, .h
文件也包含在 #include "file.h"
中,而不是 #include "include/file.h"
如我所愿。
我对这一切有一些疑问:
- 这种文件结构组织的优点是什么?
- 为什么
.h
内的文件include/
包含在#include "file.h"
而不是#include "include/file.h"
中?我知道真正的技巧在一些 Makefile 中,但是这样做真的更好,而不是明确(在代码中)我们想要包含的文件实际上在include/
目录中?
原文由 user4546925 发布,翻译遵循 CC BY-SA 4.0 许可协议
这样做的主要原因是编译的库需要标头才能被最终用户使用。按照惯例,
include
目录的内容是公开供公众使用的标头。源目录可能有供内部使用的标头,但这些标头 并不 意味着与已编译的库一起分发。因此,在使用库时,您链接到二进制文件并将库的
include
目录添加到构建系统的头文件路径中。同样,如果您将编译的库安装到集中位置,您可以知道哪些文件需要复制到中心位置(编译的二进制文件和include
目录)以及哪些文件不需要(源目录等)。