我认为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/