4.10 依赖性

可能你的port依赖其他的port.这里有5个环境变量可以用来定义.

4.10.1 LIB_DEPENDS

这个变量定义依赖的共享库.格式为lib:dir[:target],其中lib是共享库的名字,dir定义如果系统没有安装应该到哪里寻找.target定义了那个目录的行为.

     LIB_DEPENDS=
                  jpeg.9:${PORTSDIR}/graphics/jpeg:install

将检查jpeg主版本为9的共享库,如果系统中没有安装就到graphics/jpeg下编译并安装,如果target=DEPENDS_TARGET(缺省为install)target可以省略掉

注意: lib 部分是传给ldconfig -r|grep -wF的参数.不要包含任何正则表达式.

依赖性要检查两次,在extract时和install时.并且在打包时依赖信息会打进包里.

4.10.2 RUN_DEPENDS

这个变量指定port在运行是依赖的文件(普通文件或可执行文件).以path:dir[:target]给出.path是可执行文件名,dir是当系统没有安装时的寻找目录,target是那个目录的行为.如果路径以"/"开头,那么会被认为是普通文件,使用test -e检查是否存在.否则,被认为是可执行文件,使用-s检查是否处于用户的系统路径.

举个例子:

    RUN_DEPENDS=   ${PREFIX}/etc/innd:${PORTSDIR}/news/inn \
                   wish8.0:${PORTSDIR}/x11-toolkits/tk80

将检查/usr/local/etc/innd是否存在(文件或目录),如果系统中不存在,会到news/inn子目录编译并安装.同样要检查可执行文件wish8.0是否在用户路径存在,如果不存在.到x11-toolkits/tk80目录编译并安装.

注意: 这里的innd实际是可执行的,如果在普通用户的路径不存在,则要使用完整路径.

这个依赖在install时检查.同样当target=DEPENDS_TARGET时,target可省略.并且在打包时依赖信息会打进包里.

4.10.3 BUILD_DEPENDS

这个变量定义在BUILD时的依赖文件或可执行文件.跟RUN_DEPENDS一样的格式.举个例子:

     BUILD_DEPENDS=
                  unzip:${PORTSDIR}/archivers/unzip

注意: 这里的"build"指从解压到编译.

4.10.4 FETCH_DEPENDS

这个变量定义了FETCH的依赖性.格式和上面相同

     FETCH_DEPENDS=
                  ncftp2:${PORTSDIR}/net/ncftp2

4.10.5 DEPENDS

如果你的port的依赖关系不属于上面列出的4类,或者你的port只需要解开其他的port源码而不需安装.可以定义这个变量.格式为dir:[:target],没有检查的过程.同样如果target=DEPENDS_TARGET可省略.

4.10.6 通用的定义依赖性变量

如果你的port依赖于X window定义USE_XLIB=yes(暗指USE_IMAKE).如果你的port依赖gmake而不是系统make,定义USE_GMAKE=yes.如果你的port需要使用autoconf,定义USE_AUTOCONF=yes.如果你的port依赖QT,可以定义USE_QT=yes.同样如果你的port依赖perl 5,应该定义USE_PERL5=yes(这是很重要的,因为有些版本的FreeBSD的基本系统安装了perl5,而有些没有)

4.10.7 依赖性注意事项

上面提到的target可以省略,是因为target=DEPENDS_TARGET(install),这是一个用户变量,没有在Makefile中定义,如果你需要一个特殊的target,不要重新定义DEPENDS_TARGET,而是在*_DEPENDS中详细指明target.

当你make clean时,所有的依赖关系也会被自动清除.如果你不想这样,定义NOCLEANDEPENDS环境变量.

无条件的依赖其他的port,请在BUILD_DEPENDS或RUN_DEPENDS的第一格定义${NONEXISTENT},只有你在使用其它port的source时定义他.使用这个变量也可以节省编译时间.举个例子:

    BUILD_DEPENDS=   ${NONEXISTENT}:${PORTSDIR}/graphics/jpeg:extract
将转到jpeg并解开.

万不得已,不要定义DEPENDS.因为他总是要编译依赖的port(缺省要安装),并且这个依赖关系要打进pkg包.