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

    文章

    4940

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    什么是零代码平台

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

    ArkUI-X平台框架接入指南

    ArkUI平台框架(ArkUI-X)进一步将ArkUI开发框架扩展到了多个OS平台:目前支持OpenHarmony、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一
    发表于 05-18 18:21

    AWTK,开启属于你的GUI之美

    在当今数字化时代,软件界面设计的高效性和一致性至关重要。本文将探讨GUI设计从传统代码编写到所见即所得工具的演变,并介绍AWTK如何通过一致的渲染技术,为开发者带来高效且直观的开发体验。传统GUI
    的头像 发表于 05-13 11:31 781次阅读
    <b class='flag-5'>AWTK</b>,开启属于你的GUI之美

    AWTK-WEB 快速入门(6) - JS WebSocket 应用程序

    WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用Javacript语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。AWTKDesigner新建一个应用程
    的头像 发表于 02-26 11:42 632次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(6) - JS WebSocket 应用程序

    AWTK-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    导读WebSocket可以实现双向通信,适合实时通信场景。本文介绍一下使用C语言开发AWTK-WEB应用程序,并用WebSocket与服务器通讯。AWTKDesigner新建一个应用程序先安装
    的头像 发表于 02-19 11:49 890次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(5) - C 语言 WebSocket 应用程序

    AWTK-WEB 快速入门(4) - JS Http 应用程序

    导读XMLHttpRequest改变了Web应用程序与服务器交换数据的方式,fetch是其继任者。本文介绍一下如何使用JS语言开发AWTK-WEB应用程序,并用fetch访问远程数据。AWTKDesigner新建一个应用程
    的头像 发表于 01-22 11:31 722次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(4) - JS Http 应用程序

    AKI语言调用库神助攻C/C++代码迁移至HarmonyOS NEXT

    量;某知名社交电商平台使用后减少了50%以上语言调用接口代码量;某图像处理软件所有C++代码复用通过AKI来实现。使用AKI后这些项目不仅减少了项目
    发表于 01-02 17:08

    非科班也能玩转Android应用,体验QT平台能力-迅为RK3568开发板

    01-平台的优越性 Qt 是一个强大的平台框架,允许开发者使用相同的代码库来构建多个平台上的
    发表于 12-10 14:33

    AWTK-WEB 快速入门(2) - JS 应用程序

    导读AWTK可以使用相同的技术栈开发各种平台的应用程序。有时我们需要使用Web界面与设备进行交互,本文介绍一下如何使用JS语言开发AWTK-WEB应用程序。AWTKDesigner新
    的头像 发表于 12-05 01:04 799次阅读
    <b class='flag-5'>AWTK</b>-WEB 快速入门(2) - JS 应用程序