【问题标题】:removing *.o in makefile is not cleaning files在 makefile 中删除 *.o 不是清理文件
【发布时间】:2011-11-03 13:28:58
【问题描述】:

在 makefile 的 clean 中,我写了 rm -rf *.o。但它不是清理文件。如果我给了rm -rf libdummy.o,那么它会正确清洁它。所以如果我使用*,它就不能按预期工作。

干净的: rm -rf *.o rm -rf dummy.a

输出是

[执行] rm -rf *.o [执行] rm -rf dummy.a

如果文件夹有a.ob.odummy.a。在make cleana.ob.o 出现在该文件夹之后,dummy.a 被删除。

注意:我在 windows 中执行这个 make,使用 tornado 2.2 包为 vxworks 构建。我的 makefile 中的所有命令(如 make、cd、cp、rm)都是从 tornado 包中执行的。 没有名为clean 的文件名。此外,我还将clean 声明为PHONY 标签。

下面的讨论与我的问题不同。

Makefile clean not removing *.o files?

【问题讨论】:

  • 你应该发布你的makefile的相关部分
  • 发布您的 make run 输出的相关部分。

标签: makefile vxworks building rm


【解决方案1】:

在 Unix 环境中,*.o 等通配符的扩展由 shell 在调用其他程序(如 rm)之前处理。如果我没记错的话,Tornado 不包含 Unix 风格的 shell。我怀疑它的make 而是使用cmd.exe 来调用命令。 cmd.exe 不像 Unix shell 那样进行通配符扩展。它会简单地将*.o 传递给rm,由于-f 选项,它会默默地忽略它。

如果这是导致问题的原因,您可以使用 Windows del 命令,它自己进行通配符扩展,或者您可以通过编写 rm -rf $(wildcard *.o)make 为您进行通配符扩展。

【讨论】:

    【解决方案2】:

    确保在对象声明后在您的 makefile 中包含以下内容: 全部:[您的行政人员姓名] 干净

    ** 刚刚解决了我的 makefile 问题,因为 clean 必须明确声明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 2020-06-10
      • 1970-01-01
      相关资源
      最近更新 更多