web-dev-qa-db-ja.com

makeを使用してC99としてコンパイルする方法は?

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としてコンパイルするにはどうすればよいですか?

19
djTeller

モジュールのコンパイル時にコンパイラフラグを追加する正しい方法は、ccflags-y変数を設定することです。このような:

ccflags-y := -std=gnu99

詳細については、カーネルツリーの Documentation/kbuild/makefiles.txt を参照してください。

LinuxカーネルはGNU拡張子に大きく依存しているため、gnu99ではなくc99標準を使用していることに注意してください。

19
Job

あなたはただ追加することができます

CFLAGS=-std=c99

makefileの先頭に配置するか、コードをC90に準拠させることができます(LukeNが提案しているように)。

14
ocodo