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

    文章

    4601

    浏览量

    67342
收藏 人收藏

    评论

    相关推荐

    AWTK使用经验】如何添加中文输入法

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章
    的头像 发表于 06-20 08:25 635次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何添加中文输入法

    AWTK使用经验】如何响应物理按键

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章
    的头像 发表于 06-06 08:25 497次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何响应物理按键

    AWTK 开源串口屏开发(17) - 通过 MODBUS 访问数组数据

    AWTK串口屏中,内置MODBUS客户端通道模型,不用编写代码即可实现在ListView中显示远程设备上的数组数据。1.功能不用编写代码
    的头像 发表于 04-29 08:25 193次阅读
    <b class='flag-5'>AWTK</b> 开源串口屏开发(17) - 通过 MODBUS 访问数组数据

    AWTK使用经验】加载和释放外部图片

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章
    的头像 发表于 04-26 08:25 182次阅读
    【<b class='flag-5'>AWTK</b>使用经验】加载和释放外部图片

    AWTK使用经验】如何设计立体电池进度条?

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章
    的头像 发表于 04-18 08:25 225次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何设计立体电池进度条?

    AWTK 开源串口屏开发(15) - 通过 MODBUS 访问远程数据

    AWTK串口屏内置MODBUSClient模型,支持用MODBUS协议从远程设备获取数据。不用编写代码即可实现对远程设备数据的显示和修改。在AWTK串口屏中,内置了MODBUSClie
    的头像 发表于 03-30 08:23 212次阅读
    <b class='flag-5'>AWTK</b> 开源串口屏开发(15) - 通过 MODBUS 访问远程数据

    【从0开始创建AWTK应用程序】编译应用到RTOS平台

    。在AWStudio上编写AWTK应用程序后,部署到RTOS平台(如STM32)是很方便的,下面就以STM32F429型号为例子来介绍如何编译AWTK应用到RTOS
    的头像 发表于 03-21 08:23 321次阅读
    【从0开始创建<b class='flag-5'>AWTK</b>应用程序】编译应用到RTOS<b class='flag-5'>平台</b>

    AWTK 开源串口屏开发(13) - 计算器应用

    计算器是一个常见的应用程序,在AWTK串口屏中,利用fscript表达式计算函数,无需编写一行传统的代码,即可实现一个简单的计算器应用程序。1.功能计算器是一个很常见的应用,比如在电子秤中,可能
    的头像 发表于 03-16 08:23 234次阅读
    <b class='flag-5'>AWTK</b> 开源串口屏开发(13) - 计算器应用

    AWTK 开源串口屏开发(12) - 记事本应用

    记事本是一个常用的应用程序,在AWTK串口屏中,内置文件模型和文件选择对话框,无需编写一行传统的代码,即可实现一个简单的记事本应用程序。记事本是一个很常用的应用,用来编辑和查看文本文件非常方便
    的头像 发表于 03-09 08:23 184次阅读
    <b class='flag-5'>AWTK</b> 开源串口屏开发(12) - 记事本应用

    AWTK 开源串口屏开发(11) - 天气预报

    AWTK串口屏内置了XML/JSON/INI等各种数据文件的模型,并支持用HTTP/HTTPS从网络获取数据。不用编写一行代码,即可实现天气预报、股票行情、航班查询和快递查询等功能。天气预报
    的头像 发表于 03-05 08:24 190次阅读
    <b class='flag-5'>AWTK</b> 开源串口屏开发(11) - 天气预报

    AWTK开源智能串口屏方案】MCU SDK使用与编译运行

    本篇文章将介绍AWTK-HMI中的MCU端开发方法,包括MCUSDK常用API的说明、使用流程及如何编译到Linux和STM32平台。引言:AWTK-HMI是基于AWTK
    的头像 发表于 02-19 12:11 644次阅读
    【<b class='flag-5'>AWTK</b>开源智能串口屏方案】MCU SDK使用与编译运行

    AWTK开源智能串口屏方案】HMI端程序移植编译及运行

    本篇文章介绍一下AWTK开源智能串口屏方案的串口屏端(即HMI端)的编译运行步骤,并介绍如何将HMI端移植到Linux或STM32平台或RTOS平台,以及如何配置资源文件。引言:AWTK
    的头像 发表于 01-18 08:24 473次阅读
    【<b class='flag-5'>AWTK</b>开源智能串口屏方案】HMI端程序移植编译及运行

    ​【AWTK开源智能串口屏方案】方案介绍和工作原理

    本篇文章介绍一下AWTK开源智能串口屏方案的基本原理和实际使用效果,包括主要特点、应用场景、工作原理以及简单的Demo演示。引言:AWTK-HMI是基于AWTKAWTK-MVVM开发
    的头像 发表于 12-21 08:24 541次阅读
    ​【<b class='flag-5'>AWTK</b>开源智能串口屏方案】方案介绍和工作原理

    【从0开始创建AWTK应用程序】编译应用到嵌入式Linux平台运行

    AWTK是基于C语言开发的跨平台GUI框架。本系列文章介绍如何从0开始创建AWTK应用程序,包括搭建开发调试环境、使用AWTK创建Hello工程并在模拟器上运行、将
    的头像 发表于 12-07 12:08 397次阅读
    【从0开始创建<b class='flag-5'>AWTK</b>应用程序】编译应用到嵌入式Linux<b class='flag-5'>平台</b>运行

    【从0开始创建AWTK应用程序】开发及调试环境搭建

    AWTK是基于C语言开发的跨平台GUI框架。本系列文章介绍如何从0开始创建AWTK应用程序,包括搭建开发调试环境、使用AWTK创建Hello工程并在模拟器上运行、将
    的头像 发表于 11-11 10:00 413次阅读
    【从0开始创建<b class='flag-5'>AWTK</b>应用程序】开发及调试环境搭建