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

相關文章
相關標籤/搜索