2013-08-28 60 views
14

如:常見的設備模塊的Makefile是否可以將CFLAGS設置爲Linux內核模塊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 

但沒有奏效。

任何幫助?非常感謝。

+1

'$$ PWD'可以代替'$(shell pwd)' – eepp

回答

22

-O2將作爲make(或$(MAKE),因爲您正在使用它)的選項。很顯然,編譯器(可能是gcc)需要此標誌,而不是make

Kbuild瞭解一個名爲CFLAGS_modulename.o的make變量,用於在編譯此單元時添加特定的C標誌。在你的情況,你的模塊對象將是jc.o,所以你可以指定:

CFLAGS_jc.o := -O2 

,它應該工作。將V=1添加到您的$(MAKE)行以獲得詳細輸出,並且在編譯jc.c時應該看到-O2

你可以在the official documentation找到更多關於編譯模塊的信息。

12

您還可以使用

ccflags-y := -O2 

這將適用於所有的編譯與Makefile文件的模塊的源文件。這是間接記錄在由eepp提供的鏈接Section 4.2