如何修改内核模块Makefile使make clean清理dirA目录下的目标文件?
问题描述
项目目录结构:
root dirA dirB
Makefile位于dirB,所有make命令均在此目录执行。执行make时,会在dirA和dirB下生成目标文件,但执行make clean仅清理dirB内的目标文件,dirA的目标文件会保留。需求是修改Makefile或调整clean命令(不可使用显式rm),以同时清理dirA下的目标文件。
当前Makefile内容:
DIRA_PATH=../dirA/ obj-m += a.o en-objs := b.o \ $(DIRA_PATH)/c.o \ ccflags-y := -I$(src) ccflags-y += -I$(src)/$(DIRA_PATH)/ BUILD_KERNEL ?= $(shell uname -r) all: $(MAKE) -C /lib/modules/$(BUILD_KERNEL)/build M=$(CURDIR) modules clean: $(MAKE) -C /lib/modules/$(BUILD_KERNEL)/build M=$(CURDIR) clean
解决方案
利用内核模块构建系统的clean目标,扩展当前的clean规则,让它同时处理dirA目录的清理操作,无需使用显式rm命令。修改后的clean目标如下:
clean: $(MAKE) -C /lib/modules/$(BUILD_KERNEL)/build M=$(CURDIR) clean $(MAKE) -C /lib/modules/$(BUILD_KERNEL)/build M=$(DIRA_PATH) clean
原理说明
内核的make clean M=<路径>命令会自动清理指定路径下由内核构建系统生成的目标文件、.mod文件、.ko文件等产物。通过在clean目标中新增一行调用,指定M=$(DIRA_PATH),就能让内核构建系统同时清理dirA目录下的生成文件,完全符合“不可使用显式rm”的要求。
内容的提问来源于stack exchange,提问作者just_a_user
相关产品推荐
相关产品推荐

