Makefile规则中用于重命名所有.c文件的百分比
我认为Makefile中的百分比表示通配符。作为尝试,我测试了一个旨在将任何.c文件更改为“hi”的设计生成文件。这是我的Makefile规则: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) 我们如何强制执行
%.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
定义为“虚假目标”
此外,命令的输出是filehi
,而不是%.c
Makefile
应该如下所示:
%.hi : %.c
mv $< $@
%.hi:%.c
mv$<$@
它不依赖任何东西像“clean”这样的目标也不依赖任何东西。有什么区别吗?也许你的意思是“因为它不依赖任何东西,它总是最近的”?你是对的。我必须给出充分的解释。请等待我的详细回复。您应该提到.PHONY
指令,以及为什么要使用该指令(以及为什么必须使用该指令)来正确操作clean
等目标。非常好的解释。谢谢!