linux内核模块编程Makefile:obj-y、xxx-objs 如何用变量一次赋值多个?

问题:

obj-y 或者 xxx-objs 可以一次性手动赋值多个,比如

obj-y += aaa.o bbb.o ccc.o ddd.o
xxx-objs += aaa.o bbb.o ccc.o ddd.o

执行 make 可以正常编译

但是:

我如果想用一个变量来自动查找 Makefie 所在目录的所有 .c 文件,将其转换成 .o 字符串添加到 obj-y 或 xxx-objs 字段,如下:

SRCS := $(wildcard *.c)
OBJS := $(foreach f,$(SRCS),$(f:%.c=%.o))

obj-y += $(OBJS)

却完全不能用,我检查过 obj-y 确实是被赋值了的,但事实就是没法编译出对应的 .c 文件。

!!!有没有办法可以给 obj-y 赋成一个变化的值??

时隔几个月,还是在看Makefile官方的手册时找到方法。现在自问自答了。
在内核模块的makefile里面使用**$(wildcard *.c)**无法编译的原因是工作目录变了,即,make -C /xxxx 改变了工作目录,所以$(wildcard *.c)获取的是改变的工作目录下面的C文件,这当然找不到了。
正确的写法是这样

MODULE_NAME += module0

CURD := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
SRCS := $(shell cd $(CURD) && ls -f *.c 2>/dev/null |grep -v .mod.c|xargs)
OBJS := $(subst .c,.o,$(SRCS))

obj-m += _$(MODULE_NAME).o
_$(MODULE_NAME)-objs += $(OBJS)

makefile,参考如下,如有帮助,请采纳一下,谢谢。

#编译器LINUX
CXX=g++
#编译动态库
CXXDL= -g -lpthread $(LIB)
COMPILE=-c -g
#编译目标文件
CXXFLAGS=-g $(INCLUDE)  -fPIC
#头文件搜索路径
INCLUDE=-I./ -I/data/zh/include 
#动态库
LIB=-L/data/zh/lib -lnettrans -L/data/zh/lib/proTest -lLcLog

#目标文件
OBJ_FILES=MainDispMsg.o CommonTools.o MyPriorityQueue.o 


#可执行文件
TARGET=./MsgDisp10

$(TARGET):$(OBJ_FILES)
	@echo "Link the $@ starting..."
	$(CXX) -o $(TARGET) $(OBJ_FILES) $(CXXDL)
	@echo "Link the $@ done."	
$OBJ_FILES:%.o:%.cpp
	$(CXX) $< -o $@ $(COMPILE) -I$./
clean:
	rm $(OBJ_FILES) $(TARGET)