5.11.从属 port 和 MASTERDIR

如果port需要通过使用变量(例如,分辨率或纸张大小)采用不同的值来构建略有不同版本的软件包,则为每个软件包创建一个子目录,以使用户更容易看到该怎么做,但尽量共享尽可能多的文件。通常,通过巧妙使用变量,只需要在除一个之外的所有目录中使用非常简短的 Makefile。在唯一的 Makefile 中,使用 MASTERDIR 来指定其余文件所在的目录。此外,将变量作为 PKGNAMESUFFIX 的一部分,以便软件包将具有不同的名称。

这将通过一个例子最好地展示。这是打印/pkfonts300/Makefile 的一部分;

PORTNAME=	pkfonts${RESOLUTION}
PORTVERSION=	1.0
DISTFILES=	pk${RESOLUTION}.tar.gz

PLIST=		${PKGDIR}/pkg-plist.${RESOLUTION}

.if !defined(RESOLUTION)
RESOLUTION=	300
.else
.if ${RESOLUTION} != 118 && ${RESOLUTION} != 240 && \
	${RESOLUTION} != 300 && ${RESOLUTION} != 360 && \
	${RESOLUTION} != 400 && ${RESOLUTION} != 600
.BEGIN:
	@${ECHO_MSG} "Error: invalid value for RESOLUTION: \"${RESOLUTION}\""
	@${ECHO_MSG} "Possible values are: 118, 240, 300, 360, 400 and 600."
	@${FALSE}
.endif
.endif

print/pkfonts300 还具有所有常规的补丁、软件包文件等。在那里运行 make ,它将采用分辨率(300)的默认值,并正常构建port。

至于其他分辨率,这是整个 print/pkfonts360/Makefile:

RESOLUTION=	360
MASTERDIR=	${.CURDIR}/../pkfonts300

.include	"${MASTERDIR}/Makefile"

(print/pkfonts118/Makefile、print/pkfonts600/Makefile,以及所有其他文件都类似)。 MASTERDIR 定义告诉 bsd.port.mk 正规子目录集(例如 FILESDIR 和 SCRIPTDIR )应位于 pkfonts300 下。 RESOLUTION=360 行将覆盖 pkfonts300/Makefile 中的 RESOLUTION=300 行,并且 port 将以分辨率设置为 360 构建。

最后更新于

FreeBSD 中文社区 2024