前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个使用 xmake 构建 c/c++ 模块的 luarocks 插件

一个使用 xmake 构建 c/c++ 模块的 luarocks 插件

作者头像
ruki
发布2021-02-15 12:51:03
7260
发布2021-02-15 12:51:03
举报
文章被收录于专栏:TBOOX开源工程

luarocks 是 lua 的一个包管理工具,提供了各种 lua 模块的安装集成,在用户安装 lua 模块的过程中,它会使用内置的构建系统对 c/c++ 模块进行构建。

但是,它的构建系统只提供简单的配置,对于复杂的 c/c++ 模块的,就有点力不从心了,并且也无法灵活配置切换工具链。

尽管它也提供了 make 和 cmake 的构建后端支持,但是通过 makefile 方式维护同样不够灵活,而 cmake 需要用户自己提前安装好 cmake 工具,否则安装 lua 模块的时候就会被打断。

这里,我实现了一个基于 xmake 构建系统来构建 lua c/c++ 模块的 luarocks 插件 luarocks-build-xmake,来实现更加灵活方便的 lua 模块维护。

相比 luarocks 内建的构建系统,它提供了更加强大的构建配置,支持 c/c++ 依赖管理,相比 cmake 它不需要用户手动安装 xmake,此插件会自动安装 xmake 后,直接编译 lua 模块,对用户来讲,不需要做额外的操作。

  • luarocks-build-xmake
  • xmake

例子1 (带有 xmake.lua)

如果模块工程中使用了 xmake.lua 来维护构建,那么我们可以直接使用 xmake 去构建它,rockspec 文件中不需要额外的配置构建规则。

代码语言:javascript
复制
├── src
│   ├── test.c
│   └── test.h
└── xmake.lua
xmake.lua

我们需要使用 add_rules("luarocks.module") 添加针对 luarocks 模块构建规则。

代码语言:javascript
复制
add_rules("mode.debug", "mode.release")

target("example1.hello")
    add_rules("luarocks.module")
    add_files("src/test.c")
rockspec
代码语言:javascript
复制
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 文件中去描述构建规则。

代码语言:javascript
复制
├── src
    ├── test.c
    └── test.h
rockspec
代码语言:javascript
复制
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 版本

代码语言:javascript
复制
dependencies = {
    "lua >= 5.1",
    "luarocks-build-xmake"
}
build = {
    type = "xmake",
    variables = {
        xmake = {
            version = "2.5.1"
        }
    },
    copy_directories = {}
}

设置 xmake 编译参数

此插件提供了更多灵活的工具链配置,比如切换到 mingw 工具链,或者切换 vs 和 sdk 版本,修改 vs 运行时库,又或者切到 debug 编译模式等等。

代码语言:javascript
复制
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 = {}
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TBOOX开源工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例子1 (带有 xmake.lua)
    • xmake.lua
      • rockspec
      • 例子2 (没有 xmake.lua)
        • rockspec
        • 设置特定 xmake 版本
        • 设置 xmake 编译参数
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档