【问题标题】:Preprocess the Linux source code and save to another directory预处理 Linux 源代码并保存到另一个目录
【发布时间】:2020-03-28 18:13:03
【问题描述】:

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

谢谢

【问题讨论】:

  • 这里的“#include以外”是什么意思?宏将如何定义?
  • 有几种方法。 IMO:最简单的方法是写一个makefile 为你做所有的工作
  • 我建议在unix.stackexchange.com 上提问,它最适合问题主题
  • 你能澄清一下这样做的动机/目标吗?有可能提出部分解决方案的解决方法

标签: c linux gcc kernel c-preprocessor


【解决方案1】:

简短回答:不。一般情况下是做不到的。

长答案: 大多数预处理通过#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 文件,这可能会定义会影响@987654325 的符号@ - 在这种情况下为 stdlib.h。

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2013-07-28
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多