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
仅依赖于tar
、rmt
和tar.info
目标,但除了确保构建这三个目标之外,不执行任何操作。
.PHONY
是一个扩展这意味着虚假目标all
和install
此处与实际文件不对应。如果规则未标记为虚假规则,则创建名为all
或 的文件install
可能会导致相应的规则无法运行。