makefile - rm -f 和 makefile

标签 makefile gnu-make vxworks

即使使用了 -f 标志,当没有要删除的文件时,我的项目中的许多 makefile 之一都会在错误控制台中显示错误。这是 makefile 中的有问题的行

-rm -f *.o

如果我删除该行开头的破折号,它就会停止运行 - 所以我知道这是生成错误的行。

这是一个大项目,有十几个 makefile。我不明白的是其他一些人没有这个问题。

这是嵌入式编程世界 - 我正在使用 WindRiver 2.6(因此 rm 实用程序是“rm.EXE”,尽管它似乎具有常用选项)。

有谁知道为什么如果没有任何内容可删除,“rm -f”调用仍然会生成错误?

最佳答案

我不熟悉 WindRiver 工具,但这是基于典型 Unix shell 和 make 工具行为的有根据的猜测。

当您运行rm -f *.o时,会发生以下情况:

  • shell 尝试扩展 *.o,如果没有与之匹配的文件,则保持原样(尝试在不包含此类文件的目录中发出 echo *.o文件,以及包含此类文件的一个)
  • 扩展的结果会传递给rm,因此如果没有匹配的文件,则使用文字字符串*.o调用rm code> 作为其参数
  • rm 将参数解释为路径名,而不扩展模式(因为这是 shell 的工作);如果找不到文件,-f 将关闭它

从错误消息来看,您的 rm 似乎已损坏,因为当找不到名为 *.o 的文件时,它仍然会提示。您可以通过首先检查是否有任何文件与该模式匹配来解决此问题。我必须承认,我不知道如何在您的环境中做到这一点。

关于makefile - rm -f 和 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056077/

相关文章:

linux - 使 MahApp 需要 : No rule to make target 'part2.d' ,

c++ - RTOS常用的设计模式(VXworks)

linux - 使用 make 生成守护进程

c++ - 使库名称成为 make 中包含路径的一部分?

c++ - 如何将所有目标文件放入目录

c - 创建可执行文件时出现 undefined reference 问题

makefile - 为什么 "make all"没有将 "all"添加到 .PHONY 目标就按预期工作?

makefile - GNU Make 目标在 "up to date"之前构建了两次;为什么不在第一遍之后呢?

c - 如何在 vxworks 或 linux 上取消阻塞的 read/recvfrom 系统调用

ip - 如何在 VxWorks 中验证网络设备是否具有 IP 地址