如果 port 需要依某些变量的设置 (举例来说, 分辨率或纸型) 来联编略有不同的预编译包, 则可以为每一个这样的包建立不同的目录, 这样可以让用户更容易地看到他们想要安装的版本, 但又能在这些 port 之间共用尽可能多的文件。 一般情况下, 如果运用得当, 除主目录之外都只需要很短的 Makefile。 这些 Makefile 中, 可以用 MASTERDIR 来指定其它文件所在的目录。 另外, 还应使用一个变量作为 PKGNAMESUFFIX 的一部分, 以便为不同的包给出不同的命名。
用例子来阐述这些会更为明晰。 以下是 japanese/xdvi300/Makefile 的部分代码:
PORTNAME= xdvi
PORTVERSION= 17
PKGNAMEPREFIX= ja-
PKGNAMESUFFIX= ${RESOLUTION}
:
# default
RESOLUTION?= 300
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
${RESOLUTION} != 300 && ${RESOLUTION} != 400
@${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
@${ECHO_MSG} "Possible values are: 118, 240, 300 (default) and 400."
@${FALSE}
.endif
japanese/xdvi300 也提供了全部常规的补丁, 以及打包用到的文件等等内容。 如果您在那里输入 make, 它将使用默认的分辨率值 (300) 并正常地联编 port。
对于其它分辨率而言, 以下是 完整的 xdvi118/Makefile:
RESOLUTION= 118
MASTERDIR= ${.CURDIR}/../xdvi300
.include "${MASTERDIR}/Makefile"
(xdvi240/Makefile 和 xdvi400/Makefile 是相似的)。 MASTERDIR 定义会告诉 bsd.port.mk 常规的目录, 例如 FILESDIR 以及 SCRIPTDIR 应在 xdvi300 中查找。 RESOLUTION=118 这行将覆盖在 xdvi300/Makefile 中所作的 RESOLUTION=300 设置, 从而 port 将以分辨率为 118 的设置来联编。