c++ - 为什么要在 C 和 C++ 项目中创建包含/目录?

标签 c++ c include

当我处理我的个人 C 和 C++ 项目时,我通常将 file.hfile.cpp 放在同一个目录中,然后将 file.cpp 可以使用 #include "file.h" 指令引用 file.h

但是,通常会发现所有 .h 文件都放在 include/ 中的库和其他类型的项目(如 linux 内核和 freeRTOS)目录,而 .cpp 文件保留在另一个目录中。在这些项目中,.h 文件也包含在 #include "file.h" 中,而不是 #include "include/file.h"正如我所希望的那样。

我对这一切有一些疑问:

  1. 这种文件结构组织有什么好处?
  2. 为什么 include/ 中的 .h 文件包含在 #include "file.h" 而不是 #include "include/file.h"?我知道真正的诀窍是在某个 Makefile 中,但是这样做真的比(在代码中)明确我们要包含的文件实际上在 include/ 目录中更好吗?

最佳答案

这样做的主要原因是编译的库需要 header 才能被最终用户使用。按照惯例,include 目录的内容是公开供公众使用的 header 。源目录可能有供内部使用的 header ,但这些 header 要与已编译的库一起分发。

因此,在使用库时,您需要链接到二进制文件并将库的 include 目录添加到构建系统的头文件路径中。同样,如果您将编译后的库安装到集中位置,您可以知道哪些文件需要复制到中心位置(编译后的二进制文件和 include 目录),哪些文件不需要(源目录等)。

关于c++ - 为什么要在 C 和 C++ 项目中创建包含/目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554758/

相关文章:

c++ - 返回一个 std::array

c++ - 当组合框为空时不应触发组合框连接信号

c - 如何将 float[][] 类型数组转换为 "emxArray_real_T *x"

c - 字符串比较的空白问题

c - 如何在包含文件中部分声明类型定义的结构

c++ - VS2008 C++ : how can I make recursive include directories?

xcode - 如何将编译源中的文件从一个目标复制并粘贴到另一个目标?

c++ - g++中 `main( )`的链接是什么

c++ - 无法使用 OpenSSL 验证服务器证书

c++ - 将静态库添加到C或C++项目的通常方法是什么?