在内核模块中预定义一个宏

Predefine a macro in kernel module

我想使用 -D 标志为我的内核模块定义一个宏,但我不知道如何在自定义可加载内核模块中执行此操作。

为了清楚起见,要将宏 TEST 设置为 1,我通常会这样做:
cc -D TEST=1 file.c -o file

在 file.c 里面我有

#if TEST
   //do something
#endif

现在,在内核模块中有相同的代码,如何在不修改代码的情况下将 TEST 设置为 1?

这是我的 Makefile:

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules

由于 -C 标志递归调用多个 makefile,添加 -D TEST=1 不起作用,我收到以下错误: make: invalid option -- 'D'

有人知道如何解决这个问题吗?

提前致谢。

如@n.m 所建议。在评论中,解决方案是使用EXTRA_CFLAGS
所以在我的例子中它会是这样的:

all:
make EXTRA_CFLAGS=-DTEST=2 -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

或者干脆

EXTRA_CFLAGS:= -D TEST=2

all:
     make -C /lib/modules/$(shell uname -r)/build M=$(PWD)  modules