为多个 UNIX 平台编写软件
2008-11-13 08:29:12 来源:WEB开发网例如,标准 UNIX yacc 可创建名为 y.tab.c 和 y.tab.h 的文件(要求时),但 bison 将基于源名称创建文件(例如,从 parser.y 生成 parser.tab.c)。您需要考虑此差异。
另外,也要注意位于不同平台的不同位置上的不同工具。例如,Solaris 包括了 make 作为标准编译器(但不是 C 编译器),它位于 /usr/ccs/bin/make,而不是在很多其他平台上所使用的缺省路径,如 /usr/bin/make。
处理 Makefile 级别的这些差异的最简单方式(不使用 GNU 自动工具)是为每个环境创建独立的 Makefile,根据平台调用每个 Makefile。然后就能在使用 make 时使用恰当的 Makefile。
$ make -f Makefile.solaris
您仍然需要手动管理文件间的个体差异,但相应的过程应该会简单得多。
使用 C 预处理程序
通常,通过使用 C 预处理程序指令来选择不同的代码片段,可以处理头文件和大部分体系结构和功能差异。
系统能够正常工作的原因是由于 C 代码在使用 C 预处理程序 (cpp) 前已经进行了编译。在编译期间,预处理程序将查找定义,并使用一系列执行比较运算的宏来标识是否存在特定定义。然后将在特定平台内进行构建时指定该定义。
您事实上可能已经使用了指令来允许调试代码。例如,您可能会在 Solaris x86 环境内构建应用程序时指定以下定义:
#define SOLARISX86
通过头文件或在编译器的命令行上包含定义,可以指定此定义:
$ cc -DSOLARISX86
在源代码内,将随后通过检查此定义来标识要使用的正确源代码。例如,在清单 1 中就给出了定义的一个特例。
清单 1. 选择异常
#ifdef SOLARISX86
/* do solaris specific code */
#else
/* do other Unix code */
#endif
更多精彩
赞助商链接