【发布时间】:2017-03-17 21:56:14
【问题描述】:
我想通过执行一个 Makefile 来制作多个内核模块。
我有以下目录和文件:
- 顶级目录:
- 子目录0:
- module0.c
- 生成文件
- 子目录1:
- module1.c
- 生成文件
- 子目录2:
- module2.c
- 生成文件
- Makefile(我想执行这个)
- 子目录0:
我只想执行顶层目录中的 Makefile,并且应该执行所有子目录 Makefile。我想为每个子目录获取一个内核模块。
这是我当前的设置,但它不起作用。如果我在子目录中执行 make,它会构建正确的 *.ko 文件。但是,如果我执行顶级 Makefile,它只会生成 Module.symvers 和 modules.order,并且输出看起来就像每个 Makefile 都会被执行,但在子目录中没有创建任何内容。
我的顶级 Makefile 有以下内容:
TARGETS := all clean
SUBDIRS := subdir0 subdir1 subdir2
.PHONY: $(TARGETS) $(SUBDIRS)
$(TARGETS): $(SUBDIRS)
$(SUBDIRS):
$(MAKE) -C $@ $(MAKECMDGOALS)
我的子目录 Makefiles 有以下代码:
obj-m += module0.o
all:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
$(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
如果有人可以帮助我,我会很高兴。
谢谢, 米查
【问题讨论】:
-
使顶级Makefile类似,但使用
obj-y += subdir0/等 -
谢谢,我试试看;)
-
@0andriy 这正是我想要的,非常感谢。如果你写这个作为答案,我已经接受了:)
标签: c linux makefile linux-kernel kernel-module