为什么要打印“制作:没有什么可以为'所有'做的。”?

时间:2015-10-02 08:19:17

标签: c makefile linux-kernel linux-device-driver gnu-make

这是一个“Hello.c”模块和“Makefile”。从woking目录执行make后,我收到以下消息:

  

make:“全部”没什么可做的。

这是“Hello.c”文件:

#include <linux/module.h>    // included for all kernel modules
#include <linux/kernel.h>    // included for KERN_INFO
#include <linux/init.h>      // included for __init and __exit macros

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Lakshmanan");
MODULE_DESCRIPTION("A Simple Hello World module");

static int __init hello_init(void) {
  printk(KERN_INFO "Hello world!\n");
  return 0;    // Non-zero return means that the module couldn't be
}

static void __exit hello_cleanup(void) {
    printk(KERN_INFO "Cleaning up module.\n");
}   

module_init(hello_init); 
module_exit(hello_cleanup);

和“Makefile”:

obj-m += hello.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

我尝试了所有建议,我在终端中得到了这个:

root@stupid-HP:/home/stupid/cpz/module$ pwd
/home/stupid/cpz/module
root@stupid-HP:/home/stupid/cpz/module$ ls
hello.c  Makefile
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ make clean
make: Nothing to be done for `clean'.
root@stupid-HP:/home/stupid/cpz/module$ make clean all
make: Nothing to be done for `clean'.
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ ls
hello.c  Makefile
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ vi hello.c  # modified again
root@stupid-HP:/home/stupid/cpz/module$ make clean
make: Nothing to be done for `clean'.
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.

6 个答案:

答案 0 :(得分:23)

  1. make clean然后再次make
  2. 按照生成文件格式检查空格和制表符
  3. 验证内核库的路径

答案 1 :(得分:6)

根据时间戳制作作品。如果您更改了一些源文件,请编译它们并相应地构建图像。如果您不更改源文件,则编译器与您的项目无关。 make不像gcc那样工作,每次都需要编译是否需要新版本。这是为您的项目使用make的众多优势之一。

答案 2 :(得分:3)

您应该删除Makefile中的空格。在makefile中,只使用tab。

我再次测试了您的代码,它与标签

配合使用

答案 3 :(得分:2)

编译器只是告诉你你的代码已经编译好了,你的代码没有变化(它是最新的),然后就不编译了。是编译器的内置功能,如果源代码文件没有变化,编译器就不会浪费时间。

make clean之前使用make或修改Hello.c并构建项目。

答案 4 :(得分:0)

尝试:make clean删除可执行文件(./a.out)并尝试再次编译! 你可能会在某些功能上有所改变而使它看不到它

答案 5 :(得分:0)

以防有人遇到与我相同的问题:

当您的某个文件夹与可执行文件同名时,Eclipse无法正确构建。如果是这种情况,无论你做什么,你都会得到“无所事事”的信息。解决方案是重命名文件夹或可执行文件。可以找到详细信息here