C语言 预处理 Linux 源代码并保存到另一个目录



假设我在/tmp/linux-src 中拥有整个 Linux 源代码。在menuconfig之后,我想做"某种gcc -E",其中除 #include 以外的所有预处理器宏都被扩展,因此实际配置的预处理源代码(用于编译(将保存在/tmp/linux-src-to-compile中 - 不是在单个文件中,而是保留整个树结构,省略不需要的文件。这种诡计可能吗?在准备交叉编译时也可以吗?

谢谢

简短回答:否。对于一般情况,这是无法做到的。

长答案: 大多数预处理是通过 #include 文件进行的。保持 #include(不扩展它们(将防止大多数 #define,#ifdef,...从工作。

考虑SEEK_END的简单情况

file.c
#include <stdlib.h>
#include <stdio.h>
...
fseek(fp, 0, SEEK_END) ;

将SEEK_END翻译成"2"需要阅读、分析和扩展stdio.h,遵循许多#if等。此外,它还需要扩展任何以前 #included 的文件,这些文件可能会定义会影响stdio.h的符号 - 在这种情况下为 stdlib.h。

相关内容