GCC -E选项:生成预处理文件
发布时间:2020-12-15 17:30:35 所属栏目:百科 来源:网络整理
导读:C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开、文件包含、删除部分代码等。 在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即 .i 文件。然而,可以利用 -E 选项保留预处理器的输出文件,以用于诊断代码。 -E 选
C语言代码在交给编译器之前,会先由预处理器进行一些文本替换方面的操作,例如宏展开、文件包含、删除部分代码等。 在正常的情况下,GCC 不会保留预处理阶段的输出文件,也即 .i 文件。然而,可以利用-E 选项保留预处理器的输出文件,以用于诊断代码。-E 选项指示 GCC 在预处理完毕之后即可停止。默认情况下,预处理器的输出会被导入到标准输出流(也就是显示器),可以利用 -o 选项把它导入到某个输出文件:
$ gcc -E circle.c -o circle.i 表示把预处理的结果导出到 circle.i 文件。因为头文件可能相当大,如果源文件包括了多个头文件,那么它的预处理器输出可能会庞杂难读。使用 -C 选项会很有帮助,这个选项可以阻止预处理器删除源文件和头文件中的注释:
$ gcc -E -C circle.c -o circle.c 注意,这里是大写的 -C,不是小写的 -c。小写的 -c 表示只编译不链接。 下面是 GCC 预处理器阶段常用的选项: -Dname[=definition]在处理源文件之前,先定义宏 name。宏 name 必须是在源文件和头文件中都没有被定义过的。将该选项搭配源代码中的#ifdef name 命令使用,可以实现条件式编译。如果没有指定一个替换的值,该宏被定义为值 1。
-Uname如果在命令行或 GCC 默认设置中定义过宏 name,则“取消”name 的定义。-D 和-U 选项会依据在命令行中出现的先后顺序进行处理。
-Idirectory[:directory[...]]当通过 #include 命令把所需的头文件包括进源代码中时,除系统标准 include 目录之外,指定其他的目录对这些头文件进行搜索。-iquote directory[:directory[...]]这是在最近 GCC 版本中新增的选项,它为在 #include 命令中采用引号而非尖括号指定的头文件指定搜索目录。-isystem directory[:directory[...]]该选项在标准系统 include 目录以外为系统头文件指定搜索目录,且它指定的目录优先于标准系统 include 目录被搜索。在目录说明开头位置的等号,被视作系统根目录的占位符,可以使用--sysroot 或-isysroot 选项来修改它。
-isysroot directory该选项指定搜索头文件时的系统根目录。例如,如果编译器通常在 /usr/include 目录及其子目录下搜索系统头文件,则该选项将引导到 directory/usr/include 及其子目录下进行搜索。
-I-在较新版本的 GCC 中,该选项被-iquote 替代。在旧版本中,该选项用于将命令行的所有-Idirectory 选项分割为两组。所有在-I- 左边加上-I 选项的目录,被视为等同于采用-iquote 选项;这指的是,它们只对 #include 命令中采用引号的头文件名进行搜索。所有在 -I- 右边加上-I 选项的目录,将对所有 #include 命令中的头文件名进行搜索,无论文件名是在引号还是尖括号中。而且,如果命令行中出现了 -I- ,那么包括源文件本身的目录不再自动作为搜索头文件的目录。对于include目录而言,通常的搜索顺序是:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |