第 15 章 在 Port Makefile 中变量的顺序

Makefile 的开头各段必须始终按固定顺序排列。这个标准让任何人都能轻松阅读任意一个 Port,而无需在混乱顺序中查找变量。

注意

此处所述的各段和变量在一个普通 Port 中是强制性的。在一个从属 Port 中,许多段和变量可以省略。

重要

每个以下代码块之间必须以一个空行分隔。

在每个代码块中,仅设置该 Port 所必需的变量。请按照下列顺序定义这些变量。

15.1. PORTNAME

这是最重要的一段。它定义了 Port 的名称、版本、源代码分发文件的位置和分类。变量必须按如下顺序排列:

重要

PORTVERSIONDISTVERSION 只能择一而用。

15.2. PATCHFILES

此段为可选项。变量如下:

15.3. MAINTAINER

此段为强制项。变量如下:

15.4. LICENSE

这一段是可选的,但强烈建议使用。变量包括:

如果存在多个许可证,需按许可证名称对各个 LICENSE_VAR_NAME 变量进行排序。

15.5. 通用 BROKEN / IGNORE / DEPRECATED 信息段

这一段是可选的。变量包括:

重要

BROKEN_*IGNORE_* 可以是任意通用变量,例如 IGNORE_amd64BROKEN_FreeBSD_10 等。除了依赖于 USES 的变量以外,后者应放在 USESUSE_x 中。例如,IGNORE_WITH_PHP 仅在设置了 php 时才生效,BROKEN_SSL 仅在设置了 ssl 时才生效。

如果 Port 仅在满足某些条件时才应标记为 BROKEN,并且这些条件只能在包含 bsd.port.options.mkbsd.port.pre.mk 之后才能判断,那么应在 其余变量段 中设置这些变量。

15.6. 依赖关系段

这一段是可选的。变量包括:

15.7. Flavors

这一段是可选的。

以定义 FLAVORS 开始此段,然后继续定义可用的 Flavors 助手。请参阅 使用 FLAVORS 了解更多信息。

对于不能通过助手设置的变量,应使用 .if ${FLAVOR:U} == foo 结构,并将其置于各自所属的段落中。

15.8. USESUSE_x

以定义 USES 开始本段,然后继续定义可能的 USE_x

请将相关变量紧密排列。例如使用 USE_GITHUB 时,务必将所有 GH_* 变量紧跟其后。

15.9. 标准 bsd.port.mk 变量

这一段用于定义可以在 bsd.port.mk 中使用、但不属于前述各段的变量。

虽然变量的顺序并不重要,但请尽量将相似的变量归类在一起。例如,用户和用户组变量 USERSGROUPS;配置变量 CONFIGURE_**_CONFIGURE;文件与目录列表变量如 PORTDOCSPORTEXAMPLES

15.10. Options 与 Helpers

如果该 Port 使用了 选项框架,请先定义 OPTIONS_DEFINEOPTIONS_DEFAULT,然后是其它 OPTIONS_* 变量,再之后是 *_DESC 描述,最后是选项 helpers。尽量将上述所有内容按字母顺序排列。

示例 1:Options 变量排序示例

FOOBAR 选项没有标准描述,因此需要编写。其他选项已经在 Mk/bsd.options.desc.mk 中定义好了描述,无需重复编写。DOCSEXAMPLES 使用目标 helpers 来安装它们的文件,在此处也给出以示完整,尽管它们应归属 目标段,因此其前可插入其他变量和目标。

OPTIONS_DEFINE=	DOCS EXAMPLES FOO BAR
OPTIONS_DEFAULT=	FOO
OPTIONS_RADIO=	SSL
OPTIONS_RADIO_SSL=    OPENSSL GNUTLS
OPTIONS_SUB=	yes

BAR_DESC=		Enable bar support
FOO_DESC=		Enable foo support

BAR_CONFIGURE_WITH=	bar=${LOCALBASE}
FOO_CONFIGURE_ENABLE=	foo
GNUTLS_CONFIGURE_ON=	--with-ssl=gnutls
OPENSSL_CONFIGURE_ON=	--with-ssl=openssl

post-install-DOCS-on:
      ${MKDIR} ${STAGEDIR}${DOCSDIR}
      cd ${WRKSRC}/doc && ${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR}

post-install-EXAMPLES-on:
      ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
      cd ${WRKSRC}/ex && ${COPYTREE_SHARE} . ${STAGEDIR}${EXAMPLESDIR}

15.11. 其余变量

然后定义所有未在上述各段中提及的其它变量。

15.12. 目标

在所有变量定义之后,可以定义可选的 make(1) 目标。请确保 pre-<strong></strong>** 排在 post-** 之前,并按照不同阶段的执行顺序排列:

  • fetch

  • extract

  • patch

  • configure

  • build

  • install

  • test

技巧

使用选项 helpers 时,保持它们按字母顺序排序,但确保 -on 排在 -off 之前。若同时使用主目标,则主目标应排在可选目标之前:

post-install:
  # 安装通用部分

post-install-DOCS-on:
  # 安装文档

post-install-X11-on:
  # 安装与 X11 相关的部分

post-install-X11-off:
  # 安装在 X11 禁用时应存在的部分

最后更新于

这有帮助吗?