以下是我的测试项目的详细信息
myproject/
|
|- Makefile1
|- test_module.c
|- test/
|- Makefile2
以下是我的make文件的内容
Makefile 1:
obj-m:=test_module.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;
Makefile2:
obj-m:=../test_module.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;
当我在myproject
目录中调用make时,test_module.o正在编译。如果我cd到test/
目录并调用make,则再次编译test_module.o。那不是我预期的行为。由于已经编译,因此不应再次编译test_module.o
。它应该使用该目标文件来生成相应的可执行文件或内核模块。我在这里想念任何东西吗?
答案 0 :(得分:1)
是的,在Linux内核构建系统中,对象文件不会被重用于不同的目标(例如,内核模块)。
这是由辅助构建文件引起的,与对象文件一起存储。例如,在您的情况下.test_module.o.cmd
使用到test_module.o
的确切路径。当Makefile1创建文件时,此路径以test_module.o
结尾,但当Makefile2有问题时,路径以test/../test_module.o
结束。