Makefile内核模块编译

问题遇到的现象和发生背景

1.使用一般模式编写的Makefile文件可以生成目标文件。
2.使用Makefile的函数编写的Makefile在执行后没有生成目标文件,也没有报错。

问题相关代码,请勿粘贴截图

源码文件: list.c

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static  int  __init   function_one_init(void) 
{
    printk("hello hero\n");
    return 0;
}

static  void  __exit  function_one_exit(void)
{
    printk("module  exit...\n");
}

module_init(function_one_init);
module_exit(function_one_exit);
MODULE_LICENSE("GPL");

正常的Makefile文件,可以编译生成目标文件

obj-m+= list.o
CURRENT_PATH=$(shell pwd)
KERNEL_PATH=/lib/modules/$(uname -r) /build
all:
  make -C $(KERNEL_PATH)  M=$(CURRENT_PATH)  modules
clean:
  make -C $(KERNEL_PATH)  M=$(CURRENT_PATH) clean

使用Makefile函数的Makefile,不报错,也没有生成目标文件

SRCS=$(wildcard *.c)
obj-m +=$(SRCS:.c=.o)
CURRENT_PATH=$(shell pwd)
KERNEL_PATH=/lib/modules/$(shell  uname -r )/build
all:
  @echo $(SRCS)
  @echo $(obj-m)
  make  -C $(KERNEL_PATH)  M=$(CURRENT_PATH)  modules
clean:
  make  -C $(KERNEL_PATH)  M=$(CURRENT_PATH)  clean
运行结果及报错内容

可以执行,但是没有达到预期结果,期待跟普通的Makefile一样生成list.ko文件

我的解答思路和尝试过的方法

在Makefile中输出wildcard替换后的变量名也是正常的,在Makefile中手动加入
obj-m=list.o
也可以编译出目标文件。

我想要达到的结果