基于 xmake,助力打造跨平台 C/C++依赖包生态

2019-08-10 08:14:13 +08:00
 waruqi

xmake 集成了内置的远程包依赖管理,用户只需要简单地在项目中添加自己所需要的包和版本,即可自动下载和集成对应的包到项目中,并且实现编译和链接。

例如:

add_requires("libuv master", "ffmpeg", "zlib 1.20.*")
add_requires("tbox >1.6.1", {optional = true, debug = true})
add_requires("boost", {alias = "boost_context", configs = {context = true}})
target("test")
    set_kind("binary")
    add_files("src/*.c")
    add_packages("libuv", "ffmpeg", "tbox", "boost_context", "zlib")

xmake 的包仓库设计之初,就考虑到了语义版本支持,以及依赖包的跨平台支持,只要包自身能支持的平台,都可以集成进来,比如 zlib 包,在 xmake 中使用,iphoneos, android 以及 mingw 平台下都是完全可用的。

用户只需要简单的切下构建平台:

xmake f -p iphoneos -a arm64
xmake
note: try installing these packages (pass -y to skip confirm)?
in xmake-repo:
  -> zlib 1.2.11 
please input: y (y/n)
  => download https://downloads.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz .. ok                                                                               
  => install zlib 1.2.11 .. ok   

就可以对 iphoneos 平台下载集成add_requires中对应的包,xmake 的最终目标,是打造一个跨平台的包仓库,用户不再需要满地找 c/c++库,然后研究各种平台的移植,只需要简单的添加上包依赖,即可在各个平台都能方便使用。

目前 xmake 的官方仓库还在发展初期,里面的包还很少,支持的平台也不是很完善,因此,这里我简单介绍下用户如何去自己制作和上传自己需要的 c/c++包,并如何提交到我们的仓库中(也可以自建私有仓库), 希望有兴趣的小伙伴可以帮忙贡献一份微薄之力,一起共同打造和建立 c/c++依赖包生态。

关于如何制作和上传的详细说明见文章: https://tboox.org/cn/2019/08/09/xmake-upload-package/

3021 次点击
所在节点    程序员
27 条回复
waruqi
2019-08-11 19:45:52 +08:00
@FrankHB 目前 xmake 内部除了 core 部分,其他都是模块化的,像包管理什么的都是作为独立的插件来提供,相当于一个独立的子命令 xmake require,现在已经基本上没太多耦合,即使还存在些耦合问题,导致维护不便,这只需要不断地迭代改进,适当的做些重构去解耦就行了 后期如果做完善了 分拆成独立项目维护 也是有可能的

工具链如果对环境变量的有依赖 xmake 处理好就行了,并不需要去装 make,lto 会生成 makefile 这块有相关文档么,回头我研究下,目前我这边开 lto 编译并没有遇到什么问题

deps 的处理确实比较蛋疼,但也不是不可解决的问题,目前的解析上虽说不是 100%完美,但也足够了 ,其实 showInclude 的解析也是坑一堆

self host 这块,win 上已经完全支持了,并且目前也是通过 xmake 去编译的 xmake,linux mac 下也是支持的,只不过目前 xmake 生态不完善,各种发行版没有内置 xmake,即使支持 self host 也没用,还是得通过 make 去编译自身 所以这块我也没办法 源码编译安装 xmake 还是要通过 make
waruqi
2019-08-11 19:46:29 +08:00
@Monad 文档笔误 见谅
waruqi
2019-08-11 19:47:02 +08:00
@Monad 这个你提到 issues 吧 我会看下的
waruqi
2019-08-11 19:51:28 +08:00
@Monad 多语言这块 目前精力有限 只能专注于 native 兼容的多语言混编支持 c/c++为主 其他语言为辅
Monad
2019-08-11 19:51:36 +08:00
@waruqi #23 好的好的 另外还有一个 add_packagedirs 的问题 不太明白 能否指教一下




看起来是并没有找到 add_packagesdir 指定的路径呢
waruqi
2019-08-11 21:39:18 +08:00
@Monad add_packagedirs 是用于 集成本地 xxx.pkg 包的,也就是 xmake package 打出来的多平台包。。相当于所有头文件,库文件都打在本地的 xx.pkg 包里。。这块你可以看下,https://xmake.io/#/zh-cn/package/local_package

如果你不想在 xmake-repo 官方仓库放置包,而是想在项目中直接内置私有仓库目录,来集成,是可以,但你用的不对,得用 add_repositories,这块你可以看下文档: https://xmake.io/#/zh-cn/package/remote_package?id=%e4%bd%bf%e7%94%a8%e8%87%aa%e5%bb%ba%e7%a7%81%e6%9c%89%e5%8c%85%e4%bb%93%e5%ba%93

或者看下这个现有的例子 https://github.com/tboox/benchbox,这个工程里面就是内置了 packages 目录作为包仓库,然后通过 add_repositories 添加自有的仓库路径

另外,后续有 xmake 相关问题,直接到 xmake 的 issues 上反馈吧。。方便后续问题跟进。。谢谢
songjx1992
2019-08-12 09:11:30 +08:00
@FrankHB 是的为了避免这种问题, 变量最好放入 makefile. 楼主这个软件可以在 xmake.lua 里面指定.
这些都不是什么问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX