Linux内核编译期间如何传递编译器选项?

jot*_*tik 4 build-system linux-kernel

由于某些原因,我需要编译Linux内核(当前为4.7.10),并将一些简单且无害的附加命令行选项(例如,-pipe -Wsomethingetc)传递给C编译器。

我该怎么做?

更具体地说,我如何在普通make以及make menuconfig类似期间或类似期间强制执行这些编译器标志,即,无论它们何时执行,它们总是传递给C编译器。

PS:请您不要问我为什么需要如此愚蠢的东西的细节。一个令人满意的解释可能需要我几个小时才能写出来,这不是我的最佳技能之一。

Tsy*_*rev 6

从Linux内核的makefile:

# Add any arch overrides and user supplied CPPFLAGS, AFLAGS and CFLAGS as the
# last assignments
KBUILD_CPPFLAGS += $(ARCH_CPPFLAGS) $(KCPPFLAGS)
KBUILD_AFLAGS   += $(ARCH_AFLAGS)   $(KAFLAGS)
KBUILD_CFLAGS   += $(ARCH_CFLAGS)   $(KCFLAGS)
Run Code Online (Sandbox Code Playgroud)

因此,为Kbuild传递附加选项将使用通常的环境/ makefile变量,但带有K前缀:

make "KCFLAGS=-pipe -Wsomething"
Run Code Online (Sandbox Code Playgroud)


Coi*_*iby 6

Kbuild \xe2\x80\x94 Linux 内核文档提供了选项列表,

\n
    \n
  • KCPPF标志

    \n

    预处理时要传递的附加选项。预处理选项将在 kbuild 进行预处理的所有情况下使用,包括构建 C 文件和汇编程序文件。

    \n
  • \n
  • 卡夫拉格斯

    \n

    汇编器的附加选项(用于内置和模块)。

    \n
  • \n
  • AFLAGS_MODULE

    \n

    模块的附加汇编器选项。

    \n
  • \n
  • AFLAGS_KERNEL

    \n

    内置的附加汇编器选项。

    \n
  • \n
  • KCF标志

    \n

    C 编译器的附加选项(用于内置和模块)。

    \n
  • \n
  • CFLAGS_KERNEL

    \n

    当用于编译内置编译的代码时,$(CC) 的附加选项。

    \n
  • \n
  • CFLAGS_MODULE

    \n

    用于 $(CC) 的附加模块特定选项。

    \n
  • \n
  • LDFLAGS_MODULE

    \n

    链接模块时用于 $(LD) 的附加选项。

    \n
  • \n
  • 主机标志

    \n

    构建主机程序时要传递给 $(HOSTCC) 的附加标志

    \n
  • \n
\n