为什么makefile有时会将'true <filename>'作为构建脚本的一部分?</filename>

时间:2011-03-08 23:56:44

标签: makefile

例如:

# Some stuff

all: some dependencies
    @$(CC) -o foo.o foo.c
    @true foo.o
    @some other operation

“真正的foo.o”行的目的是什么?

1 个答案:

答案 0 :(得分:6)

通常,这是从Makefile生成器(例如automake)输出的。 true将替换为需要它的平台上的实际命令。最常见的情况是不自动维护静态归档索引的平台;代码看起来像

foo.a: foo.o bar.o baz.o ...
        ar rv foo.a foo.o bar.o baz.o ...
        true foo.a

但是在某些平台上(那些没有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

它不是简单地删除的原因是m4和其他宏处理器替换行上的文本要比有条件地删除行更容易。 (可以这样做,但已知高级m4 hackery导致精神错乱。:)