Building out-of-tree Linux kernel modules is pretty easy. The page https://www.kernel.org/doc/html/latest/kbuild/modules.html shows some basic info. There are some great ways to tinker with the CFLAGS (and other build flags).
The kernel module build uses rules/macros in the linux/scripts/Makefile.lib.
# deprecated old-style kernel build flags
EXTRA_CFLAGS+=-DEXTRA_CFLAGS
The kernel best practice to set build flags is through the ccflags variable.
# these flags added to all C compiles
ccflags-y += -Wall -Werror
File-specific flags can also be set.
# Set DEBUG flag when compiling hello.c
CFLAGS_hello.o += -DDEBUG
A useful feature is also removing flags. I’m currently working with a set of vendor code that has a warning triggered by a newer version of GCC. The compile is failing because the vendor makefiles use -Werror. I can’t modify the code due to license restrictions but I can modify the makefile.
# turn off the -Werror flag
ccflags-remove-y += -Werror
Similarly, can remove flags for a specific file.
# turn off -Werror just for hello.c
CFLAGS_REMOVE_hello.o += -Werror