Oracle Solaris Studio 12.2:C++ 用户指南

A.2.38 -include filename

此选项使编译器处理 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 选项,则文件的包括顺序与它们在命令行中的顺序相同。