小編給大家分享一下xmake的包機(jī)制怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
槐蔭ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
xmake將依賴庫(kù)、依賴頭文件、依賴類型、依賴接口統(tǒng)一用 option 選項(xiàng)機(jī)制進(jìn)行了封裝,更在上一層引入package包的機(jī)制,使得添加和檢測(cè)依賴更加的模塊化,簡(jiǎn)單化。。。
下面通過(guò)一個(gè)具體實(shí)例,來(lái)看下xmake的包機(jī)制怎么使用。。
假如你現(xiàn)在的工程已經(jīng)有了兩個(gè)包:zlib.pkg,polarssl.pkg(如何構(gòu)建包,后續(xù)會(huì)詳細(xì)說(shuō)明,現(xiàn)在可以參考TBOX依賴包下已有包的例子),你的工程目錄結(jié)構(gòu)如下:
demo - xmake.lua - src main.c - pkg zlib.pkg polarssl.pkg
那么你可以修改xmake.lua來(lái)使用上述的兩個(gè)依賴包:
-- 添加依賴包目錄,之后添加需要的包,都會(huì)從這個(gè)目錄里面查找
add_packagedirs("pkg")
-- 添加目標(biāo)
target("demo")
-- 設(shè)置程序類型為二進(jìn)制可執(zhí)行程序
set_kind("binary")
-- 添加源代碼文件
add_files("src/*.c")
-- 通過(guò)option機(jī)制添加polarssl、zlib包,如果檢測(cè)通過(guò),會(huì)去自動(dòng)鏈接它
add_options("polarssl", "zlib")
-- 設(shè)置自動(dòng)生成的配置頭文件
set_config_h("$(buildir)/config.h")
-- 設(shè)置config.h宏開(kāi)關(guān)的前綴: CONFIG_xxxx
set_config_h_prefix("CONFIG")
-- 添加頭文件搜索目錄,這里為了搜索到config.h
add_includedirs("$(buildir)")
接下來(lái)是代碼里面怎么去使用它:
#include <stdio.h>
// 包含自動(dòng)生成的config.h頭文件
#include "config.h"
// 如果當(dāng)前平臺(tái)存在zlib,那么使用它
#ifdef CONFIG_PACKAGE_HAVE_ZLIB
# include "zlib/zlib.h"
#endif
// 如果當(dāng)前平臺(tái)存在polarssl,那么使用它
#ifdef CONFIG_PACKAGE_HAVE_POLARSSL
# include "polarssl/polarssl.h"
#endif
int main(int argc, char** argv)
{
printf("hello world!\n");
return 0;
}
上面就是一個(gè)包使用的最簡(jiǎn)單的例子,下面我們來(lái)看下具體這個(gè)zlib.pkg是怎么生成的:
如果這個(gè)包是你自己的項(xiàng)目xxx開(kāi)發(fā)的,那么你只需要執(zhí)行xmake p進(jìn)行打包,自動(dòng)會(huì)在./build目錄下生成一個(gè)xxx.pkg的包,你直接在其他項(xiàng)目中使用就行了。。。
如果是第三方的庫(kù),那么你需要自己去構(gòu)建它,但是也很方便,實(shí)在不行你可以參考已有的TBOX依賴包中一些包,做修改就行了。。。
一個(gè)pkg包的目錄結(jié)構(gòu):
zlib.pkg - inc(頭文件目錄,可選) - zlib/zlib.h - lib(鏈接庫(kù)目錄,可選) - linux/i386/libz.a - windows/i386/zlib.lib - xmake.lua(包描述文件)
其中 inc、lib是可選的,具體邏輯還是在xmake.lua進(jìn)行描述,xmake默認(rèn)生成的包邏輯,是會(huì)優(yōu)先去檢測(cè)zlib.pkg目錄有沒(méi)有當(dāng)前可用的庫(kù)和頭文件,如果檢測(cè)不通過(guò),才會(huì)去檢測(cè)系統(tǒng)平臺(tái)的。。。
當(dāng)然你也可以自己修改檢測(cè)邏輯,不一定非得這么來(lái),你只需要根據(jù)自己的需求描述xxx.pkg/xmake.lua文件就行了。。。
下面看下我這里提供的zlib.pkg/xmake.lua描述邏輯:
-- 添加一個(gè)zlib包自動(dòng)配置選項(xiàng)
option("zlib")
-- 設(shè)置是否在xmake f -h配置菜單中顯示
set_showmenu(true)
-- 在xmake f -h中顯示相關(guān)描述信息
set_description("The MySQL package")
-- 如果檢測(cè)通過(guò),定義宏開(kāi)關(guān)到config.h
add_defines_h_if_ok("$(prefix)_PACKAGE_HAVE_ZLIB")
-- 檢測(cè)鏈接
add_links("z")
-- 添加檢測(cè)的鏈接庫(kù)目錄,這里設(shè)置優(yōu)先檢測(cè)zlib.pkg/lib/下相關(guān)平臺(tái)是否存在鏈接庫(kù),然后再去檢測(cè)系統(tǒng)的
add_linkdirs("lib/$(plat)/$(arch)")
-- 檢測(cè) #include "zlib/zlib.h" 是否能編譯通過(guò)
add_cincludes("zlib/zlib.h")
-- 添加一些檢測(cè)的頭文件目錄,默認(rèn)會(huì)在zlib.pkg/inc進(jìn)行搜索
add_includedirs("inc/$(plat)", "inc")
只要描述好xxx.pkg/xmake.lua, 一個(gè)包就能被xmake使用,并進(jìn)行自動(dòng)檢測(cè),其中利用的就是xmake的option機(jī)制,當(dāng)然在包里面不僅僅可以檢測(cè)依賴庫(kù)和頭文件,你也可以檢測(cè)是否存在某些需要的接口、類型定義等等。。
而且檢測(cè)機(jī)制完全采用lua語(yǔ)法,支持if條件邏輯,你可以針對(duì)一些特定的平臺(tái),做一些特別處理,使得你的包更加的通用。
例如下面這個(gè)基礎(chǔ)包base.pkg的描述:
-- 基礎(chǔ)包base.pkg
option("base")
-- 如果當(dāng)前為windows平臺(tái),檢測(cè)ws2_32鏈接庫(kù)依賴
if os("windows") then add_links("ws2_32")
else add_links("m", "dl", "pthread") end
如果你的包只是通過(guò)xmake.lua來(lái)描述,沒(méi)有其他文件目錄,那么你也可以把你的包xmake.lua的描述內(nèi)容,直接嵌入到工程描述文件xmake.lua中, 這兩者原本都是通用的,說(shuō)白了 add_packagedirs("pkg")
的機(jī)制,就是調(diào)用工程描述api:add_subdirs("pkg/*")
進(jìn)行添加子工程的過(guò)程。。而xxx.pkg說(shuō)白了就是一個(gè)子工程描述文件而已。。。
如果你想在你的包檢測(cè)中增加對(duì)接口的檢測(cè),那么只需要用:
add_cfuncs
add_cxxfuncs
add_ctypes
add_cxxtypes
就行了
所以利用包的機(jī)制,可以讓你的不同項(xiàng)目最大化重用你的依賴環(huán)境。。是個(gè)非常有用的功能。。
以上是“xmake的包機(jī)制怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
標(biāo)題名稱:xmake的包機(jī)制怎么用
文章轉(zhuǎn)載:http://jinyejixie.com/article8/jjecip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、微信小程序、網(wǎng)站排名、手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)