如何为 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
目标,其操作之一可能是删除该目录。