【问题标题】:How to pass compiler options during Linux kernel compilation?如何在 Linux 内核编译期间传递编译器选项?
【发布时间】:2017-03-19 10:35:20
【问题描述】:

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

我该怎么做?

更具体地说,我如何在普通 make 以及 make menuconfig 和类似情况下强制执行这些编译器标志,即,以便在执行 C 编译器时始终将它们传递给 C 编译器。

【问题讨论】:

    标签: linux-kernel build-system


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      • KCPPFLAGS

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

      • 卡夫拉格

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

      • AFLAGS_MODULE

        模块的附加汇编选项。

      • AFLAGS_KERNEL

        内置的附加汇编器选项。

      • KCFLAGS

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

      • CFLAGS_KERNEL

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

      • CFLAGS_MODULE

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

      • LDFLAGS_MODULE

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

      • 主机标记

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

      【讨论】:

        猜你喜欢
        • 2017-03-09
        • 2017-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多