如何在 linux 内核模块 Makefile 中自动填充"obj-y"或"xxx-objs"?



">obj-y";或">xxx对象";标签可以手动写入Makefile中,如下所示:

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

当domakecmd时,它工作得很好。

但是!!!:当我更改此Makefile时,如下所示:

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

obj-y += $(OBJS)

不幸的是,这个Makefile不起作用!

我想知道为什么以及如何自动填充这些标签?


新问题:

此外,我在下面的答案中发现了一些url中的方法。我就是喜欢这样。但我遇到了一些奇怪的东西。我的文件\目录如下:

.
├── Makefile
├── moduleA
│   ├── a0.c
│   ├── a0.h
│   ├── a1.c
│   ├── a1.h
│   └── Makefile
└── moduleB
├── b0.c
├── b0.h
├── b1.c
├── b1.h
└── Makefile

顶级Makefile是:

dirs := $(shell ls -d */)
obj-y := moduleA/ moduleB/
all:
make -C common/
$(MAKE) -C /lib/modules/`uname -r`/build M=$(shell pwd) modules
$(foreach N,$(dirs),cat Module.symvers > $(N)Module.symvers;)
@make clean_this
clean_this:
rm -rf Module.symvers modules.order .tmp_versions .cache.mk
clean: clean_this
$(foreach N,$(dirs),make -C $(N) clean;)

和目录模块A:中的Makefile

MODULE_NAME += module-a
obj-m += $(MODULE_NAME).o
SRCS := $(notdir $(wildcard $M/*.c))
OBJS := $(SRCS:.c=.o)
$(MODULE_NAME)-objs += $(OBJS)
$(MODULE_NAME)-objs += ../common/libcommon.a
all:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(shell pwd)

clean:
rm -rf *.o *.m* *.ko *.t* .*.t* *.s* *.o* .*_* .*cm .*.cmd .*.mk *.a .*.o.d

目录模块B中的Makefile也像这样:

MODULE_NAME += module-b
obj-m += $(MODULE_NAME).o
SRCS := $(notdir $(wildcard $M/*.c))
OBJS := $(SRCS:.c=.o)
$(MODULE_NAME)-objs += $(OBJS)
$(MODULE_NAME)-objs += ../common/libcommon.a
all:
$(MAKE) -C /lib/modules/`uname -r`/build M=$(shell pwd)

clean:
rm -rf *.o *.m* *.ko *.t* .*.t* *.s* *.o* .*_* .*cm .*.cmd .*.mk *.a .*.o.d

----------------------------------------------------------------------------

奇怪的事情,当我在subdirmoduleAmodule B中执行make命令时,所有事情都很好。

但是,当我在top dir中执行makecmd时,结果*.ko不包含它真正需要的.o文件。

请参阅以下代码作为示例:我不确定linux内核模块makefile如何与通配符一起工作

SRCS := $(notdir $(wildcard $M/*.c))
#SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
obj-y += $(OBJS)

相关内容

  • 没有找到相关文章

最新更新