所有软件包都应该提供 tar 文件来分发他们的版本。程序 foo 的 m.n 版本的 tar 文件应该命名为 foo-m.n.tar。它应该解压到名为 foo-m.n 的子目录中。tar 文件不应该解压到当前目录的文件中,因为如果用户恰好解压到包含其他文件的目录中,这会很不方便。
以下是 Bison 的 Makefile 如何创建 tar 文件的方法。这种方法也适用于其他程序。
dist: bison.info
echo bison-`sed -e '/version_string/!d' \
-e 's/[^0-9.]*\([0-9.]*\).*/\1/' -e q version.c` > .fname
-rm -rf `cat .fname`
mkdir `cat .fname`
dst=`cat .fname`; for f in $(DISTFILES); do \
ln $(srcdir)/$$f $$dst/$$f || { echo copying $$f; \
cp -p $(srcdir)/$$f $$dst/$$f ; } \
done
tar --gzip -chf `cat .fname`.tar.gz `cat .fname`
-rm -rf `cat .fname` .fname
指向其他文件系统的符号链接源文件不能使用 ln 安装到临时目录中,因此如果 ln 失败,请使用 cp。
使用 Automake 是编写 dist 目标的好方法。