一個使用 xmake 構建 c/c++ 模塊的 luarocks 插件

luarocks 是 lua 的一個包管理工具,提供了各類 lua 模塊的安裝集成,在用戶安裝 lua 模塊的過程當中,它會使用內置的構建系統對 c/c++ 模塊進行構建。c++

可是,它的構建系統只提供簡單的配置,對於複雜的 c/c++ 模塊的,就有點力不從心了,而且也沒法靈活配置切換工具鏈。git

儘管它也提供了 make 和 cmake 的構建後端支持,可是經過 makefile 方式維護一樣不夠靈活,而 cmake 須要用戶本身提早安裝好 cmake 工具,不然安裝 lua 模塊的時候就會被打斷。github

這裏,我實現了一個基於 xmake 構建系統來構建 lua c/c++ 模塊的 luarocks 插件 luarocks-build-xmake,來實現更加靈活方便的 lua 模塊維護。後端

相比 luarocks 內建的構建系統,它提供了更增強大的構建配置,支持 c/c++ 依賴管理,相比 cmake 它不須要用戶手動安裝 xmake,此插件會自動安裝 xmake 後,直接編譯 lua 模塊,對用戶來說,不須要作額外的操做。markdown

例子1 (帶有 xmake.lua)

若是模塊工程中使用了 xmake.lua 來維護構建,那麼咱們能夠直接使用 xmake 去構建它,rockspec 文件中不須要額外的配置構建規則。工具

├── src
│   ├── test.c
│   └── test.h
└── xmake.lua
複製代碼

xmake.lua

咱們須要使用 add_rules("luarocks.module") 添加針對 luarocks 模塊構建規則。oop

add_rules("mode.debug", "mode.release")

target("example1.hello")
    add_rules("luarocks.module")
    add_files("src/test.c")
複製代碼

rockspec

package = "example1"
version = "1.0-1"
source = {
    url = "git://github.com/xmake-io/luarocks-build-xmake",
    tag = "example1"
}
dependencies = {
    "lua >= 5.1",
    "luarocks-build-xmake"
}
build = {
    type = "xmake",
    copy_directories = {}
}
複製代碼

例子2 (沒有 xmake.lua)

若是模塊工程中沒有使用 xmake.lua 來維護,那麼咱們也可使用 xmake 替代 luarocks 內置的構建來編譯,只須要在 rockspec 文件中去描述構建規則。ui

├── src
    ├── test.c
    └── test.h
複製代碼

rockspec

package = "example2"
version = "1.0-1"
source = {
    url = "git://github.com/xmake-io/luarocks-build-xmake",
    tag = "example2"
}
dependencies = {
    "lua >= 5.1",
    "luarocks-build-xmake"
}
build = {
    type = "xmake",
    modules = {
        ["example2.hello"] = {
            sources = "src/test.c"
        }
    },
    copy_directories = {}
}
複製代碼

設置特定 xmake 版本

dependencies = {
    "lua >= 5.1",
    "luarocks-build-xmake"
}
build = {
    type = "xmake",
    variables = {
        xmake = {
            version = "2.5.1"
        }
    },
    copy_directories = {}
}
複製代碼

設置 xmake 編譯參數

此插件提供了更多靈活的工具鏈配置,好比切換到 mingw 工具鏈,或者切換 vs 和 sdk 版本,修改 vs 運行時庫,又或者切到 debug 編譯模式等等。lua

dependencies = {
    "lua >= 5.1",
    "luarocks-build-xmake"
}
build = {
    type = "xmake",
    variables = {
        xmake = {
            plat = "mingw",
            arch = "x86_64",
            mode = "debug",
            cflags = "-DTEST1",
            cc = "gcc",
            ld = "gcc",
            ldflags = "...",
            mingw = "mingw sdk path",
            vs = "2019",
            vs_runtime = "MT",
            vs_toolset = "",
            vs_sdkver = "",
        }
    },
    copy_directories = {}
}
複製代碼
相關文章
相關標籤/搜索