C 为什么我的Makefile构建一个不存在的源文件?
我有下面的makefile,它应该构建procdriver.c,从而输出一个.ko文件。问题是,即使我删除procdriver.c,我的makefile似乎也能够构建一个procdriver.ko文件。我想试着找出它每次从哪里得到它正在构建的源文件C 为什么我的Makefile构建一个不存在的源文件?,c,linux,makefile,compilation,C,Linux,Makefile,Compilation,我有下面的makefile,它应该构建procdriver.c,从而输出一个.ko文件。问题是,即使我删除procdriver.c,我的makefile似乎也能够构建一个procdriver.ko文件。我想试着找出它每次从哪里得到它正在构建的源文件 TARGET = procdriver obj-m := procdriver.o procdriver-objs+= gpioLib.o KDIR:= /home/pi/myRpi/linux PWD := $(shell pwd) all
TARGET = procdriver
obj-m := procdriver.o
procdriver-objs+= gpioLib.o
KDIR:= /home/pi/myRpi/linux
PWD := $(shell pwd)
all: gpioLib.o procdriver.c
echo<<"in all"
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
rm -r -f .tmp_versions *.mod.c .*.cmd *.o *.symvers
gpioLib.o: gpioLib.c gpioLib.h
gcc -c gpioLib.c -o gpioLib.o
clean:
make -C $(KDIR) SUBDIRS=$(PWD) clean
TARGET=procdriver
obj-m:=procdriver.o
procdriver objs+=gpioLib.o
KDIR:=/home/pi/myRpi/linux
PWD:=$(壳牌PWD)
全部:gpioLib.o procdriver.c
回声
这是错误的。它表示模块的唯一对象文件将是procdriver.o
构建系统将从procdriver objs
procdriver objs
初始为空,因此变成=gpioLib.o
。所以gpioLib.o
是procdriver.o
的唯一对象先决条件;因此gpioLib.c
和gpioLib.h
是procdriver.o
的唯一源先决条件<代码>procdriver.c
是冗余的
您希望(我相信)从一对对象文件procdriver.o
和gpioLib.o
生成一个模块,
分别从相应的.c
文件编译而成。您需要表达的方式是:
obj-m += my-module-name.o
my-module-name-objs := procdriver.o gpioLib.o
您必须重新考虑文件名,以避免my module name.o
和procdriver.o
。查阅文档
makefile的许多内容是多余的。据我所知,这一切
需要是:
obj-m += my-module-name.o
my-module-name-objs := procdriver.o gpioLib.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
gpioLib.o: gpioLib.h
通常makefiles不生成源文件。@Olaf在这种情况下,您有什么建议?因为当我删除procdriver.c时,它会输出一个procdriver.ko文件。这是不应该发生的。使用
remake
调试Makefile
-s@BasileStarynkevitch谢谢你,我试过重拍命令,我认为这是输出中最重要的一点:正如你突然看到的,它仍然成功地制作了procdriver。o@Olaf通常Makefiles至少会尝试构建源文件(从yacc/lex文件,或者通过检查RCS或SCCS文件)但我认为这不是问题所在。。。
obj-m += my-module-name.o
my-module-name-objs := procdriver.o gpioLib.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
gpioLib.o: gpioLib.h