默认编译出来的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,裁剪起来稍显麻烦,具体步骤以下:
全部的编译配置都在以下两个文件中:
默认状况下的配置以下:
// 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