gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:59 26 4
gpt4 key购买 nike

我有以下 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

这是 Makefile 的输出:http://paste.ubuntu.com/23575533/

编辑

remake 命令的全部输出:http://paste.ubuntu.com/23577274

我认为这是最重要的输出:http://pastebin.com/0vj9aNMg

最佳答案

obj-m := procdriver.o 
procdriver-objs+= gpioLib.o

错了。它表示该模块的唯一目标文件将是 procdriver.o并且构建系统是从 procdriver-objs

生成那个

procdriver-objs 最初是空的,因此变为 = gpioLib.o。所以 gpioLib.oprocdriver.o 的唯一对象先决条件;因此 gpioLib.cgpioLib.hprocdriver.o 的唯一源代码先决条件。 procdriver.c 是多余的。

你想(我相信)从一对目标文件 procdriver.ogpioLib.o 制作一个模块,分别从相应的.c文件编译。您需要表达的方式是:

obj-m += my-module-name.o
my-module-name-objs := procdriver.o gpioLib.o

你将不得不重新考虑你的文件名以避免 my-module-name.o 之间的冲突和 procdriver.o。查阅文档 The Linux Kernel Module Programming Guide: 2.7. Modules Spanning Multiple Files .

您的 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

关于c - 为什么我的 Makefile 构建了一个不存在的源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com