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

是否可以将CFLAGS设置为linux内核模块Makefile?,makefile,linux-kernel,linux-device-driver,Makefile,Linux Kernel,Linux Device Driver,例如:一个公共设备模块的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 我考虑是否可以将cFLAGS设置到文件中。当我将默认部分更改为 $(MAKE) -O2

例如:一个公共设备模块的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

我考虑是否可以将cFLAGS设置到文件中。当我将默认部分更改为

$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
但它不起作用


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

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

Kbuild理解名为
CFLAGS\u modulename.o的make变量,以便在编译此单元时添加特定的C标志。在您的情况下,模块对象将是
jc.o
,因此您可以指定:

CFLAGS_jc.o := -O2
它应该会起作用。将
V=1
添加到
$(MAKE)
行以获得详细的输出,当编译
jc.c
时,您应该会看到
-O2

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

您也可以使用

ccflags-y := -O2

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

$$PWD
可以替换
$(shell PWD)
这将覆盖一些内部
生成文件
中的
ccflags-y
设置,结果将中断
.h
文件查找。对我来说,它有助于使用
额外的标签
。它在
scripts/Makefile.lib
中被引用为“向后兼容性”,并被添加到
ccflags-y
,因此不会破坏任何内容。
ccflags-y+=-O2
应该可以工作。它显示在
文档/kbuild/modules.txt
中。