Linux – How to use make and compile as C99

c89c99kbuildlinuxmakefile

I'm trying to compile a linux kernel module using a Makefile:

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

Which gives me:

main.c:54: warning: ISO C90 forbids mixed declarations and code

I need to switch to C99. After reading I noticed I need to add a flag -std=c99, not sure where it suppose to be added.

How do I change the Makefile so it will compile as C99?

Best Answer

The correct way to add compiler flags when compiling modules is by setting the ccflags-y variable. Like this:

ccflags-y := -std=gnu99

See Documentation/kbuild/makefiles.txt in the kernel tree for more information.

Note that I'm using the gnu99 standard instead of c99 since the Linux kernel heavily relies on GNU extensions.