【发布时间】:2017-03-19 10:35:20
【问题描述】:
出于原因,我需要编译 Linux 内核(当前为 4.7.10),将一些简单且无害的附加命令行选项(例如 -pipe -Wsomething 等)传递给 C 编译器。
我该怎么做?
更具体地说,我如何在普通 make 以及 make menuconfig 和类似情况下强制执行这些编译器标志,即,以便在执行 C 编译器时始终将它们传递给 C 编译器。
【问题讨论】:
出于原因,我需要编译 Linux 内核(当前为 4.7.10),将一些简单且无害的附加命令行选项(例如 -pipe -Wsomething 等)传递给 C 编译器。
我该怎么做?
更具体地说,我如何在普通 make 以及 make menuconfig 和类似情况下强制执行这些编译器标志,即,以便在执行 C 编译器时始终将它们传递给 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 传递附加选项使用通常的环境/makefile 变量,但带有 K 前缀:
make "KCFLAGS=-pipe -Wsomething"
【讨论】:
Kbuild — The Linux Kernel documentation 提供选项列表,
KCPPFLAGS
预处理时要传递的其他选项。预处理选项将用于 kbuild 进行预处理的所有情况,包括构建 C 文件和汇编程序文件。
卡夫拉格
汇编器的附加选项(用于内置和模块)。
AFLAGS_MODULE
模块的附加汇编选项。
AFLAGS_KERNEL
内置的附加汇编器选项。
KCFLAGS
C 编译器的附加选项(用于内置和模块)。
CFLAGS_KERNEL
用于编译编译为内置代码的 $(CC) 的附加选项。
CFLAGS_MODULE
用于 $(CC) 的附加模块特定选项。
LDFLAGS_MODULE
链接模块时用于 $(LD) 的附加选项。
主机标记
在构建主机程序时要传递给 $(HOSTCC) 的附加标志
【讨论】: