Makefileを使用してLinuxカーネルモジュールをコンパイルしようとしています。
obj-m += main.o
all:
make -C /lib/modules/$(Shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(Shell uname -r)/build M=$(PWD) clean
それは私に与えます:
main.c:54: warning: ISO C90 forbids mixed declarations and code
C99に切り替える必要があります。読んだ後、フラグ-std = c99を追加する必要があることに気付きましたが、どこに追加するのかわかりません。
Makefileを変更してC99としてコンパイルするにはどうすればよいですか?
モジュールのコンパイル時にコンパイラフラグを追加する正しい方法は、ccflags-y
変数を設定することです。このような:
ccflags-y := -std=gnu99
詳細については、カーネルツリーの Documentation/kbuild/makefiles.txt を参照してください。
LinuxカーネルはGNU拡張子に大きく依存しているため、gnu99
ではなくc99
標準を使用していることに注意してください。
あなたはただ追加することができます
CFLAGS=-std=c99
makefile
の先頭に配置するか、コードをC90に準拠させることができます(LukeNが提案しているように)。