tbox的裁剪和定制化编译

默认编译出来的tbox库,支持的功能比较全,带有全部模块,而且支持ssl(依赖polarssl/openssl)、gzip(依赖zlib)、database(依赖sqlite3/mysql)。mysql

所以生成的库文件偏大,并且会依赖三个第三方库,若是你用不到上述三个模块,彻底能够本身配置编译所须要的模块,减少生成库的大小。android

##v1.5.x以上版本ios

新版采用xmake进行构建,裁剪模块已是至关方便了,默认状况下回去自动检测依赖的第三方库进行编译。git

若是要禁用某个第三方库或者模块,只要执行xmake f --xxxx=false就好了,全部第三方库依赖都是可选,彻底能够禁用。。github

例如,禁用全部第三方库支持:算法

xmake f --polarssl=false --sqlite3=false --openssl=false --mysql=false --zlib=false

若是要最小化编译,能够禁用全部可选模块和特性:sql

xmake f --network=false --asio=false --charset=false --xml=false --database=false --zip=false --thread=false

tbox中使用float相关的代码,也是能够裁剪掉的,而且tbox还提供了一整套fixed1六、fixed30、fixed6的定点运算库,来应付一些须要float运算的地方bash

这个在图形算法上用的比较多,具体使用能够参考个人另一个图形库项目:gbox,具体的裁剪以下:优化

xmake f --float=false

只要执行上面的配置,跟float相关的操做接口,都会禁用,很是适合一些低端的嵌入式设备上。lua

若是不想编译demo,节省时间,能够禁用demo模块:

xmake f --demo=false

若是想要更小的话,就只能启用release模式了,编译发布版本,这样符号信息也被彻底strip了:

xmake f -m release

若是还想更小,能够修改xmake.lua,设置优化选项为最小化编译(固然,针对ios/android等移动端,tbox默认就是这么设置的):

set_optimize("smallest")

若是把这些配置所有禁用,按照上述模式编译出来的tbox库,会至关小,虽然小了很多,可是该有的基础功能仍是都有的。

也能够根据本身的须要,启用部分模块和特性。

##v1.4.x如下版本

低版本的tbox,裁剪起来稍显麻烦,具体步骤以下:

全部的编译配置都在以下两个文件中:

  • ./tbox/plat/arch/config.h: 编译所需配置宏开关
  • ./tbox/plat/arch/config.mak: 编译makefile所需配置

默认配置

默认状况下的配置以下:

// module
#define TB_CONFIG_MODULE_HAVE_XML
#define TB_CONFIG_MODULE_HAVE_ZIP
#define TB_CONFIG_MODULE_HAVE_ASIO
#define TB_CONFIG_MODULE_HAVE_OBJECT
#define TB_CONFIG_MODULE_HAVE_CHARSET
#define TB_CONFIG_MODULE_HAVE_DATABASE

// third party
#define TB_CONFIG_THIRD_HAVE_ZLIB                   
//#define TB_CONFIG_THIRD_HAVE_OPENSSL  
#define TB_CONFIG_THIRD_HAVE_POLARSSL   
//#define TB_CONFIG_THIRD_HAVE_MYSQL
#define TB_CONFIG_THIRD_HAVE_SQLITE3
# module
TB_CONFIG_MODULE_HAVE_XML                   = y
TB_CONFIG_MODULE_HAVE_ZIP                   = y
TB_CONFIG_MODULE_HAVE_ASIO                  = y
TB_CONFIG_MODULE_HAVE_OBJECT                = y
TB_CONFIG_MODULE_HAVE_CHARSET               = y
TB_CONFIG_MODULE_HAVE_DATABASE              = y

# third party
TB_CONFIG_THIRD_HAVE_ZLIB                   = y
TB_CONFIG_THIRD_HAVE_OPENSSL                = n
TB_CONFIG_THIRD_HAVE_POLARSSL               = y
TB_CONFIG_THIRD_HAVE_MYSQL                  = n
TB_CONFIG_THIRD_HAVE_SQLITE3                = y

能够看到,里面启用了全部的模块,和第三方依赖库。

若是你不想使用ssl、sql则能够直接把它们禁用掉,而后:make f 下更新配置,再从新编译下就好了。

最小化编译

若是你是在嵌入式环境使用,须要最小化编译库的大小,能够禁用全部可选模块和第三方库:

// module
//#define TB_CONFIG_MODULE_HAVE_XML
//#define TB_CONFIG_MODULE_HAVE_ZIP
//#define TB_CONFIG_MODULE_HAVE_ASIO
//#define TB_CONFIG_MODULE_HAVE_OBJECT
//#define TB_CONFIG_MODULE_HAVE_CHARSET
//#define TB_CONFIG_MODULE_HAVE_DATABASE

// third party
//#define TB_CONFIG_THIRD_HAVE_ZLIB                   
//#define TB_CONFIG_THIRD_HAVE_OPENSSL  
//#define TB_CONFIG_THIRD_HAVE_POLARSSL   
//#define TB_CONFIG_THIRD_HAVE_MYSQL
//#define TB_CONFIG_THIRD_HAVE_SQLITE3
# module
TB_CONFIG_MODULE_HAVE_XML                   = n
TB_CONFIG_MODULE_HAVE_ZIP                   = n
TB_CONFIG_MODULE_HAVE_ASIO                  = n
TB_CONFIG_MODULE_HAVE_OBJECT                = n
TB_CONFIG_MODULE_HAVE_CHARSET               = n
TB_CONFIG_MODULE_HAVE_DATABASE              = n

# third party
TB_CONFIG_THIRD_HAVE_ZLIB                   = n
TB_CONFIG_THIRD_HAVE_OPENSSL                = n
TB_CONFIG_THIRD_HAVE_POLARSSL               = n
TB_CONFIG_THIRD_HAVE_MYSQL                  = n
TB_CONFIG_THIRD_HAVE_SQLITE3                = n

而后配置最小化编译:

# 手动启用最小化编译
make f SMALL=y
make r

这样的话,编译出来的库,是至关小的,顶多几百k,并且提供最基本的stream、container、algorithm、platform、memory、libc、libm等等经常使用基础操做支持,不提供扩展特性:xml、ssl、database、object、asio等等。

可是对于经常使用操做来说也基本够用了,主要仍是得看我的的具体需求,来定制化本身最适合的编译版本。

禁用浮点运算

若是你的系统不支持浮点操做,彻底能够经过以下配置禁用掉,这样的话TBOX大部分浮点操做代码就不会编译进去,库文件会更小。

并且TBOX提供了一整套定点操做的库,彻底能够替代大部分经常使用浮点操做,效率比浮点运算更高。

//#define TB_CONFIG_TYPE_FLOAT

相关文章
相关标签/搜索