跨平台需要什么?
这个问题的答案分为两种。第一种是选择一个跨平台的GUI,然后在它的基础上做应用,对应于不同平台的特殊硬件或特殊协议写不同版本的代码。第二种是完全自己开发,如果开发者对各个平台都不熟悉或只熟悉其中一个平台,那么这是个极大的挑战。
无论哪一种都需要每种平台下的C/C++编译器。编译器提供的宏将是我们的代码判断不同平台的依据,而通过编写不同平台下的makefile(可使用cmake),同样能控制需要编译的代码。
应当确定的一点是,平台的不同只会体现在两个地方:不同的硬件和不同的操作系统,那么我们必须保证这些不同不要扩散到代码的所有地方。
提取不同点,是跨平台的第一步。对于一个跨平台的GUI,它主要关心这些:输入设备信息(事件)的获取、图像的输出、音频等。对事件获取这一点,不同的平台截然不同,Win平台直接从系统消息循环获取、Unix平台通过侦听设备端口,读取设备驱动文件获取(或在Linux下直接通过X窗口协议获取);对图像输出这一点,Windows平台可以使用gdi、directx、opengl,WinCE平台可以使用gdi或gapi,Linux平台可以使用framebuffer0、opengl或X窗口协议;对于音频,Win平台可以直接使用api,Linux下则要自己打开音频设备文件,往里面写pcm流。当然,对于不同的操作系统还有很多不同点,如线程与进程、io、字节序等。
将这些不同限制在一个比较底层的地方,在其上构建一个框架,使上层的所有应用都与平台无关,这是接下来的工作。
图形系统可以统一采用fra