如何在 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) 的附加标志
出于原因,我需要编译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) 的附加标志