如何在从多个目录/文件编译内核模块时创建新目录并将.o文件移动到该目录

时间:2013-01-16 16:23:53

标签: c linux module makefile kernel

我正在尝试从多个目录中的文件构建内核模块。我想将生成的.o文件放在与每个源目录对应的新目录中。

例如,如果我的来源是A / a1.c,A / a2.c,B / b.c;我希望.o文件转到A / new-dir / a1.o A / new-dir / a2.o B / new-dir / b.o等等。

我当前的Makefile是这样的:

obj-m += foo.o

lavya-objs := lavya_module1.o  lavya_module2.o

lavya-objs += $(A_DIR)/a1.o $(A_DIR)/a2.o $(B_DIR)/b.o 


all: 

        make -C $KERNEL_PATH  M=$(PWD) modules

它会在与相应的.c文件相同的目录中创建.o文件。是否可以修改Makefile以在每个源目录中插入新目录并在那里移动.o文件?怎么办呢?

非常感谢!

2 个答案:

答案 0 :(得分:0)

主内核Makefile讲述了将输出放在别处的两种方法(不像你问的那样,但它可能很有用)。查找KBUILD_OUTPUT(可以设置为环境变量或O = where / to / put to make。)

答案 1 :(得分:0)

是的,您可以在下面的makefile中执行此操作

obj-m += foo.o

lavya-objs := lavya_module1.o  lavya_module2.o

lavya-objs += $(A_DIR)/a1.o $(A_DIR)/a2.o $(B_DIR)/b.o 


all: 
    make -C $KERNEL_PATH  M=$(PWD) modules
    mkdir -p $(A_DIR)/objs && mv $(A_DIR)/*.o $(A_DIR)/objs/
    mkdir -p $(B_DIR)/objs && mv $(B_DIR)/*.o $(B_DIR)/objs/