如何为 C 项目提供子目录以在 makefile 中包含 .h 文件?

How give subdirectories for C project to include .h file in makefile?

我有一个分为 Z 模块的 C 项目。每个模块都有自己的子文件夹,其中 /inc/ 用于存放头文件, /src/ 用于存放 src 文件。如图所示:

Zth_Module.c 包含来自其他各个模块的文件:

/*In Zth_Module.c*/
#include "first.h"
#include "second.h"
#include "third.h"

如果在makefile中使用-I,如何给出每个子目录的路径? 它显示致命错误:Timer.h:在其他子目录中的包含文件 first.h 或 second.h 没有这样的文件或目录。

如何提供搜索所有*.h文件的路径?

处理此问题的一些方法是:

  • 在 makefile 中,在编译标志中包含一个 -I <i>directory</i> 开关,每个目录包含可能包含的头文件. -I 开关告诉编译器在通常搜索的目录之外搜索以下目录。例如,您可以将开关 -I first/inc -I second/inc -I third/inc 添加到编译标志。您可以在 makefile 中手动列出目录,或使用 GNU Make 功能在 make 期间发现它们。
  • 将列出项目根目录的单个 -I <i>directory</i> 开关添加到编译开关并更改所有 #include 源代码中的指令使用相对于该根的路径,例如 #include "first/inc/first.h".
  • 创建一个将所有头文件复制到一个公共目录的 makefile 目标,为该目录添加一个 -I <i>directory</i> 开关到编译开关,并将该目标列为每个目标文件的依赖项,以便 make 始终在编译源文件之前执行该目标的命令。该目标可以根据用于收集头文件的目录命名,并且通常位于构建的临时或暂存区域中。此外,如果您有一个 clean 目标,其操作之一可能是删除该目录。