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.mkbsd.port.mk 两种写法之一; 任何时候都不要同时使用两种写法。

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

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

变量描述
ARCHuname -m 输出得到的硬件架构的名字 (例如, i386)
OPSYSuname -s 返回的操作系统类型 (例如, FreeBSD)
OSREL操作系统的版本号 (例如 2.1.52.2.7)
OSVERSION操作系统的版本号的数值形式; 它等于 __FreeBSD_version
PORTOBJFORMAT系统默认的执行文件格式 (elfaout; 请注意, 现代的 FreeBSD 版本中, aout 已在淘汰之列。)
LOCALBASElocal 目录的根 (例如, /usr/local/)
PREFIXport 应被安装到哪里 (参见 关于 PREFIX 的更多说明)。

注意:

如果您需要定义 USE_IMAKEUSE_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= 后面使用制表符, 而不是空格, 对吧? :-)

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

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.