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
。
我想要 .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
。