Makefile规则中用于重命名所有.c文件的百分比

Makefile规则中用于重命名所有.c文件的百分比,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) 我们如何强制执行

我认为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中提到的,在创建
clean
文件的情况下,这将不起作用。解决方法是将
clean
定义为“虚假目标”

此外,命令的输出是file
hi
,而不是
%.c

Makefile
应该如下所示:

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

它不依赖任何东西像“clean”这样的目标也不依赖任何东西。有什么区别吗?也许你的意思是“因为它不依赖任何东西,它总是最近的”?你是对的。我必须给出充分的解释。请等待我的详细回复。您应该提到
.PHONY
指令,以及为什么要使用该指令(以及为什么必须使用该指令)来正确操作
clean
等目标。非常好的解释。谢谢!