例如:
# Some stuff
all: some dependencies
@$(CC) -o foo.o foo.c
@true foo.o
@some other operation
Run Code Online (Sandbox Code Playgroud)
"真正的foo.o"系列的目的是什么?
通常,这是从Makefile生成器输出的,例如automake.该true会与需要它的平台的实际命令代替.最常见的情况是不自动维护静态归档索引的平台; 代码看起来像
foo.a: foo.o bar.o baz.o ...
ar rv foo.a foo.o bar.o baz.o ...
true foo.a
Run Code Online (Sandbox Code Playgroud)
但是在某些平台上(那些没有System V或GNU的平台ar)它将改为
foo.a: foo.o bar.o baz.o ...
ar rv foo.a foo.o bar.o baz.o ...
ranlib foo.a
Run Code Online (Sandbox Code Playgroud)
它不是简单地删除的原因是,m4在一条线上替换文本比在条件删除线上更容易和其他宏处理器.(它可以做到,但m4已知先进的hackery导致精神错乱.:)