电子说
AWTK 是 ZLG 开源的跨平台 GUI 引擎,本文介绍一下基于 AWTK 开发应用程序需要遵循的规范和方法,以保证应用程序也能跨平台运行。
如果需要的某个功能,在各个平台都有不同的实现,先研究各个平台提供的功能,再抽象一个统一的接口,针对各个平台实现一个适配器。应用程序使用统一的接口去访问这些功能,应用程序不但能够跨平台运行,代码也更具可读性。
“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 是字符串格式不是数组。
区分各个平台的宏
#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')
全部0条评论
快来发表一下你的评论吧 !