gcc include header 并在预处理后得到输出

gcc include header and get output after preprocessing

我想要 .c 文件的预处理输出,但我还想在 .c 文件中包含一个没有宏“include...”的 header 文件。通常,您添加 -I 选项以包含 headers 所在的目录。 但是如果我想结合-I 和-E,gcc 似乎不会在指定目录中包含我的 header 文件。 我的命令:

gcc -E -I/externDefines myFirmware.c > myFirmware.preprocessed

有人知道问题出在哪里吗?

-I 并不意味着“在编译中包含给定目录中的头文件。”它的意思是“当搜索使用 #include 请求的文件时,在给定目录中查找文件。”

GCC 有一个命令行开关,-include <i>file</i> 将在编译中包含一个文件。但是,它包含一个文件,因此您必须列出要包含的每个文件;它不会自动将所有头文件包含在一个目录中。您正在使用的命令行 shell 可能具有有助于生成带有文件名的 -include 开关列表的功能。

在不更改 Y.c 的情况下编译 Y.c 时包含头文件 X.h 的可移植方法是创建一个包含以下内容的辅助文件:

#include "X.h"
#include "Y.c"

然后编译它而不是 Y.c