0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【Z站推荐】用 AWTK 编写跨平台的代码

ZLG致远电子 2022-09-09 14:50 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

AWTK 是 ZLG 开源的跨平台 GUI 引擎,本文介绍一下基于 AWTK 开发应用程序需要遵循的规范和方法,以保证应用程序也能跨平台运行。93ae978a-2eec-11ed-9ade-dac502259ad0.jpg  尽量使用tkc中的函数tkc 中提供了编码、时间、网络、串口、线程、互斥和文件系统等各种需要跨平台接口的封装,这些接口在各个平台都有实现。
93ae978a-2eec-11ed-9ade-dac502259ad0.jpg  针对接口编程

如果需要的某个功能,在各个平台都有不同的实现,先研究各个平台提供的功能,再抽象一个统一的接口,针对各个平台实现一个适配器。应用程序使用统一的接口去访问这些功能,应用程序不但能够跨平台运行,代码也更具可读性。


93ae978a-2eec-11ed-9ade-dac502259ad0.jpg  指定特定平台的库、头文件、预处理参数和链接参数helper 提供了一组函数来处理不同平台的参数。平台名称的取值有:

“Windows” Windows 平台;

Linux” Linux 平台;

“Darwin” MacOS 平台;

* AndroidIOS 不使用 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 是字符串格式不是数组。

93c1d94e-2eec-11ed-9ade-dac502259ad0.jpg 区分各个平台的宏

  • WIN32 或 WINDOWS Windows 平台;
  • MINGW Windows 平台的 MinGW 编译;
  • LINUX Linux 平台;
  • MACOS 或__APPLE__ Macos 平台;
  • ANDROID Android 平台;
  • IOS iOS 平台。

* 这些宏虽然可以区分不同的平台,但是如果将这些宏分散在应用程序中,代码将会变得丑陋难读。建议先定义接口,在适配器中使用这些宏。示例:

#ifdefANDROID
#include"SDL.h"
#endif/*ANDROID*/

#ifdefined(__APPLE__)||defined(LINUX)
#include
#include
#include
#include
#elifdefined(WIN32)
#include
#include
#include
#include
#include
#include
#defineunlink_unlink
#definerenameMoveFileA
#defineftruncate_chsize
#include"./dirent.inc"
#include"tkc/utf8.h"
#include"tkc/mem.h"
#endif

#ifdefined(__APPLE__)
#include
#endif/*__APPLE__*/

93c1d94e-2eec-11ed-9ade-dac502259ad0.jpg 添加平台特有的文件有些文件是特定平台才需要的,可以根据平台的名称,来决定添加哪些文件。示例:

importplatform;

OS_NAME=platform.system()
ifOS_NAME=='Windows':
sources=Glob('src/windows/*.c')
elifOS_NAME=='Linux':

sources=Glob('src/linux/*.c')

【版权声明】本文为ZLG开发者社区用户原创内容,未经授权不得转载。欢迎更多用户到社区交流互动、创作博文,一经采用,可获得百元京东E卡。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4986

    浏览量

    74644
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    换个芯片就要重写半套代码?PPEC Workbench嵌入式架构开发的标准答案

    、驱动库、开发规范互不兼容,工程师需要在多个工具间来回切换,团队协同开发效率低下,难以形成标准化开发流程。 **▌AI赋能不足,代码可靠性难以保障:**当前AI技术在架构开发中的应用多停留在表面,生成
    发表于 05-26 13:40

    EsDA科普 | AWTK:打造流畅、开源、平台的嵌入式GUI

    工业GUI开发四大坑:界面卡、启动慢、平台难、版权贵。AWTK纯C语言+自研算法破局,一套代码跑遍全
    的头像 发表于 04-09 11:35 465次阅读
    EsDA科普 | <b class='flag-5'>AWTK</b>:打造流畅、开源、<b class='flag-5'>跨</b><b class='flag-5'>平台</b>的嵌入式GUI

    什么是低代码:低代码开发平台详解 5个优质低代码平台工具

    的在于“开发模式”和“门槛”,一张通俗的对比就能看懂: 传统开发工具:需手动编写大量代码,门槛高,仅专业程序员能使用,开发周期长(数月),迭代繁琐,人力成本高; 低代码开发
    发表于 04-07 16:03

    使用PYTHON进行的平台仿真

    内部的解决方案,而且还允许平台模拟,以从其他程序或编程语言获益,并结合熟悉物理光学特性的VirtualLab Fusion,从而扩展模拟、优化、设计和后处理的选项。 因此,我们正在深入研究
    发表于 04-02 08:21

    2026年低代码平台市场综合评测:国内10大低代码平台深度解析

    、供应链管理、零售门店数字化、移动办公应用。 6.简道云(综合评分:87.8) 核心定位:中小企业轻量化数字化一式工具,定位为零代码快速搭建平台,以“灵活易用、快速迭代”为核心特点。 核心优势:纯可
    发表于 03-30 16:02

    开源鸿蒙技术大会2025丨平台开发框架分论坛:共拓移动开发新边界,共创平台生态新时代

    随着开源鸿蒙生态的持续壮大,开发者迎来了除Android与iOS之外的“第三种选择”。为解决“加入一个新生态就会增加一倍投入”的行业痛点,让开发者的代码能够在更多平台上复用,开源鸿蒙平台
    的头像 发表于 11-20 17:31 1308次阅读
    开源鸿蒙技术大会2025丨<b class='flag-5'>跨</b><b class='flag-5'>平台</b>开发框架分论坛:共拓移动开发新边界,共创<b class='flag-5'>跨</b><b class='flag-5'>平台</b>生态新时代

    代码开发平台推荐:2025国内低代码开发平台排名TOP10

    代码开发平台排行榜 在企业数字化转型的浪潮中,低代码开发平台正逐渐成为企业实现高效开发和快速迭代的重要工具。随着技术的不断进步和市场需求的持续增长,低
    的头像 发表于 10-28 10:22 1065次阅读

    2025主流低代码平台有哪些:低代码开发平台选型指南指南

    在企业数字化转型进入深水区的当下,低代码开发平台已从早期的“效率工具”升级为“核心基建”。其工程化能力、流程适配深度、技术延展性与行业积淀,直接决定了企业转型的成效。据Gartner预测,到2026
    的头像 发表于 10-22 11:49 620次阅读

    物联网平台设备关联+拖拽式搭建

    提到物联网,很多人会想到“传感器采集数据、设备远程控制”,但很少有人知道:让分散的传感器“说话互通”、让不懂编程的人也能搭建物联网应用,背后都离不开“物联网平台”。物联网项目的“中枢大脑”,通过
    的头像 发表于 08-29 15:35 991次阅读

    什么是零代码平台

    代码平台是一种无需编写传统代码,通过可视化拖拽、参数配置、逻辑连线即可快速搭建业务流程与应用系统的工具平台。它将复杂的软件开发过程转化为
    发表于 07-12 20:28

    ArkUI-X平台技术落地-华为运动健康(二)

    代码依赖了鸿蒙Next系统的原生能力,我们将该原生能力包称为A包;与此同时,我们开发平台场景包,为了描述方便,我们将这个包命名为B包,B包的接口形式与数据结构跟A包保持一致,但是B包的内部实现与A包
    发表于 06-18 23:04

    ArkUI-X平台技术落地-华为运动健康(一)

    NEXT系统上运动健康的架构设计如下: 1.新建独立平台的Entry模块,该平台Entry模块用于编译
    发表于 06-18 22:53

    ArkUI-X平台应用改造指南

    ArkUI-X平台应用改造指南 现状与诉求 随着 HarmonyOS Next 5.0 版本正式发布,众多开发者基于 ArkTS 语言为 HarmonyOS Next 系统开发了大量应用,这极大
    发表于 06-16 23:05

    ArkUI-X平台差异化

    平台使用场景是一套ArkTS代码运行在多个终端设备上,如Android、iOS、OpenHarmony(含基于OpenHarmony发行的商业版,如HarmonyOS Next)。当不同平台
    发表于 06-10 23:08

    ArkUI-x平台Bridge最佳实践

    代码中⽤到了不⽀持平台的API,此时⼜想平台可以利⽤此机制将不⽀持
    发表于 06-10 23:06