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=\"${LOCALBASE}/bin/less\"而非 -DPAGER=\"/usr/local/bin/less\"。 这种方法能够增加在系统管理员把整个 /usr/local 目录挪到其它位置时安装成功的机会。