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

How to pass compiler options during Linux kernel compilation?

出于原因,我需要编译Linux内核(目前为4.7.10)传递一些简单无害的附加命令行选项(例如-pipe -Wsomething 等)到 C 编译器。

我该怎么做?

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

来自 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)

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

make "KCFLAGS=-pipe -Wsomething"

Kbuild — The Linux Kernel documentation 提供选项列表,

  • KCPPFLAGS

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

  • KAFLAGS

    汇编程序的附加选项(针对 built-in 和模块)。

  • AFLAGS_MODULE

    模块的其他汇编器选项。

  • AFLAGS_KERNEL

    built-in 的附加汇编程序选项。

  • KCFLAGS

    C 编译器的附加选项(针对 built-in 和模块)。

  • CFLAGS_KERNEL

    用于编译编译为 built-in.

    的代码时 $(CC) 的附加选项
  • CFLAGS_MODULE

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

  • LDFLAGS_MODULE

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

  • HOSTCFLAGS

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