中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

xmake的包機制怎么用

發布時間:2021-12-20 13:47:52 來源:億速云 閱讀:223 作者:小新 欄目:大數據

小編給大家分享一下xmake的包機制怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

xmake將依賴庫、依賴頭文件、依賴類型、依賴接口統一用 option 選項機制進行了封裝,更在上一層引入package包的機制,使得添加和檢測依賴更加的模塊化,簡單化。。。

下面通過一個具體實例,來看下xmake的包機制怎么使用。。

假如你現在的工程已經有了兩個包:zlib.pkg,polarssl.pkg(如何構建包,后續會詳細說明,現在可以參考TBOX依賴包下已有包的例子),你的工程目錄結構如下:

demo
 - xmake.lua
 - src
   main.c
 - pkg
   zlib.pkg
   polarssl.pkg

那么你可以修改xmake.lua來使用上述的兩個依賴包:

-- 添加依賴包目錄,之后添加需要的包,都會從這個目錄里面查找
add_packagedirs("pkg")

-- 添加目標
target("demo")    -- 設置程序類型為二進制可執行程序    set_kind("binary")    -- 添加源代碼文件    add_files("src/*.c")    -- 通過option機制添加polarssl、zlib包,如果檢測通過,會去自動鏈接它    add_options("polarssl", "zlib")    -- 設置自動生成的配置頭文件    set_config_h("$(buildir)/config.h")    -- 設置config.h宏開關的前綴: CONFIG_xxxx    set_config_h_prefix("CONFIG")    -- 添加頭文件搜索目錄,這里為了搜索到config.h    add_includedirs("$(buildir)")

接下來是代碼里面怎么去使用它:

#include <stdio.h>

// 包含自動生成的config.h頭文件
#include "config.h"

// 如果當前平臺存在zlib,那么使用它
#ifdef CONFIG_PACKAGE_HAVE_ZLIB #   include "zlib/zlib.h" #endif

// 如果當前平臺存在polarssl,那么使用它
#ifdef CONFIG_PACKAGE_HAVE_POLARSSL #   include "polarssl/polarssl.h" #endif

int main(int argc, char** argv)
{    printf("hello world!\n");    return 0;
}

上面就是一個包使用的最簡單的例子,下面我們來看下具體這個zlib.pkg是怎么生成的:

如果這個包是你自己的項目xxx開發的,那么你只需要執行xmake p進行打包,自動會在./build目錄下生成一個xxx.pkg的包,你直接在其他項目中使用就行了。。。

如果是第三方的庫,那么你需要自己去構建它,但是也很方便,實在不行你可以參考已有的TBOX依賴包中一些包,做修改就行了。。。

一個pkg包的目錄結構:

zlib.pkg
    - inc(頭文件目錄,可選)
       - zlib/zlib.h
    - lib(鏈接庫目錄,可選)
       - linux/i386/libz.a
       - windows/i386/zlib.lib
    - xmake.lua(包描述文件)

其中 inc、lib是可選的,具體邏輯還是在xmake.lua進行描述,xmake默認生成的包邏輯,是會優先去檢測zlib.pkg目錄有沒有當前可用的庫和頭文件,如果檢測不通過,才會去檢測系統平臺的。。。

當然你也可以自己修改檢測邏輯,不一定非得這么來,你只需要根據自己的需求描述xxx.pkg/xmake.lua文件就行了。。。

下面看下我這里提供的zlib.pkg/xmake.lua描述邏輯:

-- 添加一個zlib包自動配置選項
option("zlib")    -- 設置是否在xmake f -h配置菜單中顯示    set_showmenu(true)    -- 在xmake f -h中顯示相關描述信息    set_description("The mysql package")    -- 如果檢測通過,定義宏開關到config.h    add_defines_h_if_ok("$(prefix)_PACKAGE_HAVE_ZLIB")    -- 檢測鏈接    add_links("z")    -- 添加檢測的鏈接庫目錄,這里設置優先檢測zlib.pkg/lib/下相關平臺是否存在鏈接庫,然后再去檢測系統的    add_linkdirs("lib/$(plat)/$(arch)")    -- 檢測 #include "zlib/zlib.h" 是否能編譯通過    add_cincludes("zlib/zlib.h")    -- 添加一些檢測的頭文件目錄,默認會在zlib.pkg/inc進行搜索    add_includedirs("inc/$(plat)", "inc")

只要描述好xxx.pkg/xmake.lua, 一個包就能被xmake使用,并進行自動檢測,其中利用的就是xmake的option機制,當然在包里面不僅僅可以檢測依賴庫和頭文件,你也可以檢測是否存在某些需要的接口、類型定義等等。。

而且檢測機制完全采用lua語法,支持if條件邏輯,你可以針對一些特定的平臺,做一些特別處理,使得你的包更加的通用。

例如下面這個基礎包base.pkg的描述:

-- 基礎包base.pkg
option("base")        -- 如果當前為windows平臺,檢測ws2_32鏈接庫依賴    if os("windows") then add_links("ws2_32")    else add_links("m", "dl", "pthread") end

如果你的包只是通過xmake.lua來描述,沒有其他文件目錄,那么你也可以把你的包xmake.lua的描述內容,直接嵌入到工程描述文件xmake.lua中, 這兩者原本都是通用的,說白了 add_packagedirs("pkg") 的機制,就是調用工程描述api:add_subdirs("pkg/*")進行添加子工程的過程。。而xxx.pkg說白了就是一個子工程描述文件而已。。。

如果你想在你的包檢測中增加對接口的檢測,那么只需要用:

  • add_cfuncs

  • add_cxxfuncs

  • add_ctypes

  • add_cxxtypes

就行了

所以利用包的機制,可以讓你的不同項目最大化重用你的依賴環境。。是個非常有用的功能。。

以上是“xmake的包機制怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆安县| 曲沃县| 延安市| 巨野县| 化州市| 大埔县| 榆社县| 南溪县| 海门市| 泸州市| 杭锦后旗| 泸水县| 许昌市| 玉田县| 正阳县| 双江| 来安县| 防城港市| 井陉县| 承德县| 抚顺市| 修武县| 顺昌县| 淄博市| 彭泽县| 交城县| 连山| 伊吾县| 德江县| 乳山市| 鄂尔多斯市| 潍坊市| 芜湖市| 麻阳| 邓州市| 呼伦贝尔市| 惠安县| 桓仁| 徐闻县| 尉犁县| 青阳县|