12.6. 在 `bsd.port.mk` 之后写一些内容
上一页 | 第 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=` 后面使用制表符， 而不是空格， 对吧？ :-)

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

本文档和其它文档可从这里下载： ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题，请先阅读 文档，如不能解决再联系 <questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.