在不同版本的 Unix 下可能需要对代码进行一些修改或增加少许编译选项, 才能够正确地编译和运行。 如果您需要根据一些条件来对代码进行修改, 请尽可能让这些修改通用, 这样, 我们就能够将这些代码移植回更早的 FreeBSD 系统, 并交叉移植到其它 BSD 系统, 例如来自 CSRG 的 4.4BSD, BSD/386, 386BSD, NetBSD 和 OpenBSD。
推荐的获得 4.3BSD/Reno (1990) 以及更新版本 BSD 代码版本号的方式, 是使用
sys/param.h
中所定义的 BSD
宏的值。 一般来说这个文件已经被引用了;
如果没有的话, 增加下述代码:
到 .c
文件中合适的地方。
我们相信所有定义了这两个符号的系统中, 都提供了
sys/param.h
。 如果您发现有不这样做的系统,
请通过致信 FreeBSD ports 邮件列表 让我们了解这一情况。
另一种方法是使用 GNU Autoconf 风格的方式:
采用这种方法时, 不要忘了把 -DHAVE_SYS_PARAM_H
加到
Makefile
中的 CFLAGS
里。
一旦引用了 sys/param.h
, 您就可以使用:
来检测代码是否正在 4.3 Net2 代码基础, 或更新的系统上编译 (例如 FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 以及更高版本)。
使用:
来检测代码是否正在 4.4 或更新的系统 (例如 FreeBSD 2.x, 4.4, NetBSD 1.0、 BSD/386 2.0 或更高版本)。
对于 4.4BSD-Lite2 代码系来说, BSD
宏的值应该是
199506
。 这里只是作为信息提供,
您不应使用它来区分基于 4.4-Lite 的 FreeBSD 和基于 4.4-Lite2 的版本。
这些情况下, 您应使用
__FreeBSD__
宏。
保守地使用:
__FreeBSD__
在所有版本的
FreeBSD 中皆有定义。 如果您正进行的修改
只 影响 FreeBSD, 则应使用这个宏。
类似 sys_errlist[]
之于
strerror()
这样的移植问题是伯克利代码系公用的,
而并非 FreeBSD 所专有。
在 FreeBSD 2.x 中, __FreeBSD__
定义为 2
。 更早版本中, 它曾经是
1
。 新的版本都会在主要的版本号变化时变更它。
如果您需要区分 FreeBSD 1.x 系统和 FreeBSD 2.x 及更高版本的区别,
通常应使用前述的 BSD
宏来进行。
如果事实上需要一个 FreeBSD 专有的修改 (例如,
在使用 ld
时需要特殊的共享库选项),
则可以用 __FreeBSD__
和 #if
__FreeBSD__ > 1
来检测 FreeBSD 2.x 和新系统上的变化。
如果需要更细粒度地检测 FreeBSD 2.0-RELEASE 之后版本的变化,
则可以使用:
在已有的数百个 port 中, 只有一两个应该使用 __FreeBSD__
。
早期的 port 在不适当的地方使用了它并引发问题,
并不意味着您也必定如此。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.