是否可以将 CFLAGS 设置为 Linux 内核模块 Makefile?

问题描述 投票:0回答:2

例如:常见设备模块的Makefile

obj-m:=jc.o

default:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean

我想知道是否可以为这个特定的 Makefile 设置

gcc
CFLAGS
。当我将 default 部分更改为(注意添加
-O2
)时:

$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules

更改不会生效(即 -

-O2
未添加到
CFLAGS
)。

有什么帮助吗? 非常感谢。

gcc makefile linux-kernel linux-device-driver compiler-flags
2个回答
33
投票
在您尝试的操作中,

-O2
将是
make
(或
$(MAKE)
,当您使用它时)的一个选项。显然,编译器(可能
gcc
)需要这个标志,而不是
make

Kbuild 理解名为

CFLAGS_modulename.o
的 make 变量,以便在编译此单元时添加特定的 C 标志。在您的情况下,您的模块对象将是
jc.o
,因此您可以指定:

CFLAGS_jc.o := -O2

它应该可以工作。将

V=1
添加到您的
$(MAKE)
行以获得详细输出,并且在编译
-O2
时您应该看到
jc.c

您可以在官方文档中找到有关编译模块的更多信息。


19
投票

您也可以使用

ccflags-y := -O2

这将应用于使用 Makefile 为模块编译的所有源文件。这间接记录在 eepp 提供的链接中第 4.2 节

© www.soinside.com 2019 - 2024. All rights reserved.