C 为什么我的Makefile构建一个不存在的源文件?

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

我有下面的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: 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