makefile - 旨在重命名所有 .c 文件的 Makefile 规则中使用的百分比

标签 makefile

我认为Makefile中的百分比意味着通配符。作为尝试,我测试了一个设计的 Makefile,旨在将任何 .c 文件更改为“hi”。这是我的 Makefile 规则:

%.c:
         mv $@ hi

我将上面的文件保存到“Makefile”,然后在终端中输入

touch hello.c
make  

终端显示

make: `hello.c' is up to date.

这当然不是我想要的。两个天真的问题:

  • a) 为什么 makefile 确定“hello.c”实际上是“最新的”?
  • b) 我们怎样才能强制应用该规则?

最佳答案

您尚未在规则中定义任何依赖项。 hello.c 已存在,并且没有任何依赖项具有比 hello.c 新的时间戳。

有些规则没有依赖关系,例如clean。在这种情况下,文件 clean 不存在,并且 make 尝试通过执行规则的命令集来创建它。然而,正如 GNU make documentation 中提到的这在创建 clean 文件的情况下不起作用。解决方案是将 clean 定义为“Phony Target”。

此外,该命令的输出是文件 hi 而不是 %.c

Makefile 应如下所示:

%.hi : %.c
     mv $< $@

关于makefile - 旨在重命名所有 .c 文件的 Makefile 规则中使用的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650330/

相关文章:

linux - make 文件中的错误 : *** missing separator. 停止

iphone - 如何制作像 CGRectMake (iphone) 这样的 struct maker

bash - Makefile 匹配任何目标/任务

C++ makefile 找不到 hdf5 的共享库

c++ - MacOSx - 使用 make 命令编译 C 项目

Android ndk - 设置同时作业的最大数量?

linux - 进行安装,但不安装到默认目录?

c - xcode中makefile项目的C代码中的"symbol not found"

ruby-on-rails - 由于某种原因无法创建 Makefile

c++ - C++ makefile 问题