WEB开发网
开发学院操作系统Linux/Unix 为多个 UNIX 平台编写软件 阅读

为多个 UNIX 平台编写软件

 2008-11-13 08:29:12 来源:WEB开发网   
核心提示: 例如,标准 UNIX yacc 可创建名为 y.tab.c 和 y.tab.h 的文件(要求时),为多个 UNIX 平台编写软件(4),但 bison 将基于源名称创建文件(例如,从 parser.y 生成 parser.tab.c),将随后通过检查此定义来标识要使用的正确源代码,例如,您

例如,标准 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

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:多个 UNIX 平台

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接