FreeBSD Porter 手册
上一页 | 第12章 　该做什么和不该做什么 | 下一页

# 12.6 在 `bsd.port.mk` 之后写一些内容

不要在 `.include <bsd.port.mk>` 这行之后增加任何内容。 这通常可以通过在您的 `Makefile` 中间的某处引用 `bsd.port.pre.mk`， 并在结尾的地方引用 `bsd.port.post.mk` 来避免。

> 注意: 只能够采用 `bsd.port.pre.mk`/`bsd.port.post.mk` 或 `bsd.port.mk` 两种写法之一； 任何时候都不要同时使用两种写法。

`bsd.port.pre.mk` 只定义了很少的变量， 它们可以在 `Makefile` 中用于进行一些测试， 而 `bsd.port.post.mk` 则定义了所有其它的变量。

下面是一些由 `bsd.port.pre.mk` 定义的比较重要的变量 (这并不是一份完整的列表， 您可以阅读 `bsd.port.mk` 以获得全部变量的名字)。

变量 | 描述
--- | ---
`ARCH` | 由 `uname -m` 输出得到的硬件架构的名字 (例如， `i386`)
`OPSYS` | 由 `uname -s` 返回的操作系统类型 (例如， `FreeBSD`)
`OSREL` | 操作系统的版本号 (例如 `2.1.5` 或 `2.2.7`)
`OSVERSION` | 操作系统的版本号的数值形式； 它等于 `__FreeBSD_version`。
`PORTOBJFORMAT` | 系统默认的执行文件格式 (`elf` 或 `aout`； 请注意， “现代的” FreeBSD 版本中， `aout` 已在淘汰之列。)
`LOCALBASE` | “local” 目录的根 (例如， `/usr/local/`)
`PREFIX` | port 应被安装到哪里 (参见 关于 `PREFIX` 的更多说明)。

> 注意: 如果您需要定义 `USE_IMAKE`， `USE_X_PREFIX`， 或 `MASTERDIR` 这些变量， 则应在引用 `bsd.port.pre.mk` 之前完成。

下面是一些在引用 `bsd.port.pre.mk` 之后可以进行的判断：

    # 如果 perl5 已经在系统中提供， 则不必编译 lang/perl5
    .if ${OSVERSION} > 300003
    BROKEN= perl is in system
    .endif

    # ELF 只使用一个 shlib 版本
    .if ${PORTOBJFORMAT} == "elf"
    TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}
    .else
    TCL_LIB_FILE=  ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR}
    .endif

    # 软件会自动为 ELF 创建符号链接， 但 a.out 则需要另行创建
    post-install:
    .if ${PORTOBJFORMAT} == "aout"
           ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so
    .endif

您还记得应该在 `BROKEN=` 和 `TCL_LIB_FILE=` 后面使用制表符， 而不是空格， 对吧？ :-)

上一页 | 起始页 | 下一页
__FreeBSD_version 值 | 上一级 | 在 wrapper 脚本中使用 `exec` 语句

若您有关于 FreeBSD ports 系统的问题， 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题， 请致函 <doc@FreeBSD.org>。