PREFIX
能够决定 port 安装时的目的位置。
一般情况下这个位置是 /usr/local
或 /opt
, 但也可以设为其它的任意值。
您的 port 则必须遵循这个变量。
除此之外, 如果用户配置了 DESTDIR
,
则表示希望将 port 安装到另一个环境, 通常是 jail
或在 /
以外的其他位置挂接的系统中。
实际上, port 会安装到
DESTDIR
/PREFIX
,
并注册到位于 DESTDIR
/var/db/pkg
的预编译包数据库中。 由于 DESTDIR
是由
ports 框架藉由 chroot(8) 来实现的, 您在撰写符合
DESTDIR
规范的 ports 时并不需要什么额外的工作。
一般而言 PREFIX
会设为
LOCALBASE_REL
(默认是
/usr/local
)。 如果设置了
USE_LINUX_PREFIX
, 则 PREFIX
会设为 LINUXBASE_REL
(默认是
/compat/linux
)。
避免将 /usr/local
或
/usr/X11R6
硬编码到源代码中,
能够大大提高 port 的灵活性, 并适应不同环境的需要。
对于使用 imake
的 X port,
这一工作是自动完成的; 其他情况下, 通常可以简单地将 port
所用到的 Makefile
脚本中出现的
/usr/local
(或对于没有使用 imake 的 X port 而言,
/usr/X11R6
) 替换为读取
${PREFIX}
变量就能达到目的了,
因为这个变量在联编和安装的过程中, 会自动向下传递。
一定要避免让您的 port 在
/usr/local
而不是正确的 PREFIX
中安装文件。 简单的测试方法是:
#
make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
如果有文件安装到了 PREFIX
以外的地方,
打包过程将抱怨找不到这些文件。
这一步骤并不能帮助发现内部引用, 或纠正在引用其它 port
中的文件时使用的 LOCALBASE
。 您需要在
/var/tmp/`make -V PORTNAME`
中测试安装好的软件, 才能够达到这样的目的。
您可以在自己的 Makefile
中改变
PREFIX
变量的值, 也可以通过用户环境变量来影响它。
然而, 一般情况下决不应该在 Makefile
中明确设置它的值。
此外, 引用其它 port 中的文件时, 应使用前面介绍的变量,
而不要直接指定它们的路径名。 例如, 如果您的 port
需要使用 PAGER
这个宏来指明
less
的完整路径, 应使用下面的编译选项:
而非
-DPAGER=\"/usr/local/bin/less\"
。
这种方法能够增加在系统管理员把整个 /usr/local
目录挪到其它位置时安装成功的机会。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.