awtk 是 zlg 开源的跨平台 gui 引擎,本文介绍一下基于 awtk 开发应用程序需要遵循的规范和方法,以保证应用程序也能跨平台运行。
尽量使用 tkc 中的函数
tkc 中提供了编码、时间、网络、串口、线程、互斥和文件系统等各种需要跨平台接口的封装,这些接口在各个平台都有实现。
针对接口编程
如果需要的某个功能,在各个平台都有不同的实现,先研究各个平台提供的功能,再抽象一个统一的接口,针对各个平台实现一个适配器。应用程序使用统一的接口去访问这些功能,应用程序不但能够跨平台运行,代码也更具可读性。
指定特定平台的库、头文件、预处理参数和链接参数
helper 提供了一组函数来处理不同平台的参数。平台名称的取值有: “windows” windows 平台;
“linux” linux 平台;
“darwin” macos 平台;
* android 和 ios 不使用 scons 编译,故不使用这种方式。
添加平台特有的库;
示例:
helper.add_platform_libs(windows, [ws2_32])
helper.add_platform_libs(linux, [pthread, dl, readline, m])
helper.add_platform_libs(darwin, [pthread, dl, readline, m])
添加平台特有的库的搜索路径;
add_platform_libpath(self, platform_name, app_libpath)
示例: helper.add_platform_libpath(linux, [/usr/local/lib])
* 注意这里的 app_libpath 是数组类型。 添加平台特有的头文件的搜索路径;
add_platform_cpppath(self, platform_name, app_cpppath)
示例: helper.add_platform_libpath(linux, [/usr/local/include])
* 注意这里的 app_cpppath 是数组类型。 添加平台特有的宏定义预处理参数;
add_platform_ccflags(self, platform_name, app_ccflags)
示例: helper.add_platform_ccflags(linux, -dsome_macro=1 )
* ccflags 是字符串格式不是数组。 添加平台特有的c++文件的预处理参数;
add_platform_cxxflags(self, platform_name, app_cxxflags)
示例: helper.add_platform_cxxflags(linux, -dsome_macro=1 )
* cxxflags 是字符串格式不是数组。 添加平台特有的链接参数;
add_platform_linkflags(self, platform_name, app_linkflags)
* linkflags 是字符串格式不是数组。
区分各个平台的宏
win32 或 windows windows 平台; mingw windows 平台的 mingw 编译; linux linux 平台; macos 或__apple__ macos 平台; android android 平台; ios ios 平台。 * 这些宏虽然可以区分不同的平台,但是如果将这些宏分散在应用程序中,代码将会变得丑陋难读。建议先定义接口,在适配器中使用这些宏。示例: #ifdef android
#include sdl.h
#endif /*android*/
#if defined(__apple__) || defined(linux)
#include
#include
#include
#include
#elif defined(win32)
#include
#include
#include
#include
#include
#include
#define unlink _unlink
#define rename movefilea
#define ftruncate _chsize
#include ./dirent.inc
#include tkc/utf8.h
#include tkc/mem.h
#endif
#if defined(__apple__)
#include
#endif /*__apple__*/
添加平台特有的文件
有些文件是特定平台才需要的,可以根据平台的名称,来决定添加哪些文件。示例: import platform;
os_name=platform.system()
if os_name == 'windows':
sources=glob('src/windows/*.c')
elif os_name == 'linux':
sources=glob('src/linux/*.c')
拥抱数字化时代之解读传感器行业大数据
看好联网与移动应用 ARM抢占物联网商机
华为50G PAM4技术已经成熟 相关产品正式发布
机器人画家可以通过观察人类画家的笔触来学习吗?
单相电气防火限流式保护器保障末端用电安全
基于AWTK开发应用程序需要遵循的规范和方法
调整比特币单位会有什么不一样
JEDEC暂停华为、海思活动后引发的三大影响
苹果斥资536亿美元成为2020年半导体芯片的最大买家 三星第二
AndesBoardFarm提供SoC工程师透过远程在线FPGA开发板探索RISC-V处理器
TCL未来三年将投资800亿在半导体等领域
充电桩测试原理的简单介绍
以89C51单片机为核心的低成本便携式数字显示环境噪声测量仪设计
dfrobot电源适配器-5V 4A简介
雪湖科技的激光点云AI计算模块三个技术创新特点
PTC热敏电阻器选用指南
新工业时代下自动化控制与数据的完美结合
将3D干涉检查移至电子设计以获得更高效的流量
基于工业互联网平台的智能工厂实现
谷景电子色环电感 0510 10mH 10%替代案例分析