25

eg: 一个通用设备模块的 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

但它没有用。

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

4

2 回答 2

31

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

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

CFLAGS_jc.o := -O2

它应该可以工作。添加V=1到您的$(MAKE)行以获得详细的输出,您应该看到-O2何时jc.c编译。

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

于 2013-08-28T03:51:54.967 回答
17

你也可以使用

ccflags-y := -O2

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

于 2013-08-28T14:10:51.623 回答