问题遇到的现象和发生背景
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
也可以编译出目标文件。