当 makefile 规则有先决条件但没有配方时,这是什么意思?

当 makefile 规则有先决条件但没有配方时,这是什么意思?
INSTALL = /usr/local/bin/install -c
INSTALLDATA = /usr/local/bin/install -c -m 644
# The directory to install tar in.
bindir = $(prefix)/bin
# The directory to install the info files in.
infodir = $(prefix)/info




.PHONY: all
all:    tar rmt tar.info

tar:    $(OBJS)
        $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)

rmt:    rmt.c
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ rmt.c

tar.info: tar.texinfo
        makeinfo tar.texinfo




.PHONY: install
install: all
        $(INSTALL) tar $(bindir)/$(binprefix)tar
        -test ! -f rmt || $(INSTALL) rmt /etc/rmt
        $(INSTALLDATA) $(srcdir)/tar.info* $(infodir)

我无法理解目标“all”的规则,它没有配方,因此当输入“make all”时,会发生什么以及如果没有“.PHONY:all”行会怎样。

答案1

目标all仅依赖于tarrmttar.info目标,但除了确保构建这三个目标之外,不执行任何操作。

.PHONY是一个扩展这意味着虚假目标allinstall此处与实际文件不对应。如果规则未标记为虚假规则,则创建名为all或 的文件install可能会导致相应的规则无法运行。

相关内容