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')
【版权声明】本文为zlg开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东e卡。
GPU加速高性能计算经典应用在线研讨会第二场
苹果斥资6亿美元收购Dialog电池管理芯技术与资产
高通和全球领先的智能手机制造商合作,在智能手机上支持Snapdragon Satellite
全球巨头争相布局智能音箱市场 小小音箱撬动2000亿IOT市场
用于培养箱加湿器自动补水的光电液位开关LLE103101
【Z站推荐】用 AWTK 编写跨平台的代码
带温度补偿的湿度测量电路
消费级无人机不行了?无人机技术发展尚属初级阶段
新型实体企业激发数字化转型“链式”效应
YXC扬兴科技石英振荡器YSO110TR,工业级耐用:适应于光伏储能产品BMS
功率放大器在双锁相放大电路中的应用
案例┃凯米斯传感器助力地下管网水质管控,监测检测双管齐下
U02超声波油耗检测传感器介绍
苹果:如电池出问题 可对iPad进行更换
乐视僵局,张志伟能否扭转乐视危机
易云维®产业电商APP供应西门子Siemens控制器扩展模块POL956
成都博高借助LoRa®赋能智慧医疗和大健康黄金赛道
NXP 的LNA无线解决方案
J-Link工具下i.MXRT的串行NOR Flash下载算法设计
2月份最值得入手千元机,你拥有了吗?