make: 没有什么可以为“所有人”做的。当我试图编译

make: Nothing to be done for `all'. when i tried to compile

这是我的 make 文件的代码

obj-m +=hello-1.o
all:
<tab>make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
<tab>make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

我有几个问题

  1. 我们保存的C语言文件扩展名为*.c,那么Makefile应该使用哪个扩展名呢?
  2. 当我在终端 "make" 中抛出命令时,它给我的错误是 make: 没有什么可以为 `all' 做的。

可能文件 all 已经存在。由于它不依赖于任何东西,并且不是 .PHONY 的依赖项,因此它的存在足以认为它已完成。

我建议添加

.PHONY: all clean

Makefile 结束。

您可以随意调用文件,只要是 Makefile ;-) 实际上,有几个非标准名称可以用作备用名称,或者您可以提供-f 标记为 make 的名称,但如果您可以避免使用它们,我不会推荐其中任何一个。

其他评论(你没有问过,但你还是得到了):

  1. 避免在命令中直接调用 make;总是使用 $(MAKE)。例如,当您使用 -n 时,这会有所帮助。
  2. 不要阻止您的 makefile 的用户为不同于现在 运行 的内核构建内核。为它创建一个变量(例如 KVER := $(shell uname -r)KSRC := /lib/modules/$(shell uname -r)/build 以便它可以在命令行上被覆盖。