此选项使编译器将 filename 视为作为 #include 预处理程序指令出现在主源文件的第一行。考虑源文件 t.c:
main() { ... } |
如果使用命令 cc -include t.h t.c 编译 t.c,则编译时好像源文件包含以下项:
#include "t.h" main() { ... } |
编译器在其中搜索 filename 的第一个目录是当前工作目录而不是包含主源文件的目录,这就是显式包括某个文件时的情况。例如,下面的目录结构包含两个名称相同但位置不同的头文件:
foo/ t.c t.h bar/ u.c t.h |
如果您的工作目录是 foo/bar,并且您使用命令 cc ../t.c -include t.h 进行编译,则编译器会包括 foo/bar 中的 t.h 而不是 foo/ 中的此文件,后者是源文件 t.c 内包含 #include 指令时的情况。
如果编译器在当前工作目录中找不到使用 -include 指定的文件,则会在正常目录路径中搜索该文件。如果您指定多个 -include 选项,则文件的包括顺序与它们在命令行中的顺序相同。