
AWTK 是 ZLG 開源的跨平臺 GUI 引擎,本文介紹一下基于 AWTK 開發應用程序需要遵循的規范和方法,以保證應用程序也能跨平臺運行。
??盡量使用?tkc?中的函數tkc 中提供了編碼、時間、網絡、串口、線程、互斥和文件系統等各種需要跨平臺接口的封裝,這些接口在各個平臺都有實現。
??針對接口編程如果需要的某個功能,在各個平臺都有不同的實現,先研究各個平臺提供的功能,再抽象一個統一的接口,針對各個平臺實現一個適配器。應用程序使用統一的接口去訪問這些功能,應用程序不但能夠跨平臺運行,代碼也更具可讀性。
??指定特定平臺的庫、頭文件、預處理參數和鏈接參數helper 提供了一組函數來處理不同平臺的參數。平臺名稱的取值有: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 ")
add_platform_cxxflags(self, platform_name, APP_CXXFLAGS)
helper.add_platform_cxxflags("Linux", " -DSOME_MACRO=1 ")
add_platform_linkflags(self,?platform_name,?APP_LINKFLAGS)
??區分各個平臺的宏
- WIN32 或 WINDOWS Windows 平臺;
- MINGW Windows 平臺的 MinGW 編譯;
- MACOS 或__APPLE__ Macos 平臺;
* 這些宏雖然可以區分不同的平臺,但是如果將這些宏分散在應用程序中,代碼將會變得丑陋難讀。建議先定義接口,在適配器中使用這些宏。#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卡。
地址:https://developer.zlg.cn(長按復制到PC端打開)