【问题标题】:How to properly make clean in kernel Makefile如何在内核 Makefile 中正确地进行清理
【发布时间】:2012-11-06 07:16:07
【问题描述】:

我正在将驱动程序移植到 3.4 内核,当我执行 make clean 时,它并没有清理一些 .o 文件,所以现在我想知道这样做的正确方法是什么。

我有以下 Makefile(注意:在与内核不同的目录中):

obj-y += foo.o
foo-objs += foo1.o foo2.o
clean-files := foo3.o

当我运行 make clean 时,它会清除 foo3.o,但会留下 foo.o、foo1.o 和 foo2.o。我可以将所有这些放入干净的文件中,但这似乎是多余的,我认为有一些方法可以使 Makefile 自动清除 obj-y 目录中的所有对象。

谢谢,

约翰

【问题讨论】:

    标签: linux kbuild


    【解决方案1】:

    这是我以前make clean我的驱动代码的方式:

    clean:
        $(MAKE) -C $(KDIR) M=$$PWD clean
    

    【讨论】:

      【解决方案2】:

      您可以在 makefile 中使用正则表达式,并使用 *.o 代替 foo1.o、foo2.o 等。

      常见的方法是有一个“干净”的目标,如下所示:

      clean:
          $(RM) .*.cmd *.o *.ko -r .tmp* 
      

      【讨论】:

      • 关于这个的两个快速问题:1)干净的目标与干净的文件相比如何? 2)此外,我似乎在较旧的内核(2.6.30)中工作过。有什么想法可能会改变吗?
      • 看起来这个变量是由内核脚本处理的:lxr.linux.no/linux+v3.6.7/scripts/Makefile.clean
      • 看起来在任何这些 Makefile 中都没有调用干净的目标,这是我的问题的根源。清理文件和清理目录正在被擦除......
      • 因此有两种解决方案(均已测试):首先是将 *.[aos] 添加到 clean-files 宏中。二是修改主linux makefile,将第三方目录添加到clean里面的rm -f命令中。
      猜你喜欢
      • 2018-02-18
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多