跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Xrepo:一个现代化的跨平台 C/C++ 包管理器
未分類
2020 年 11 月 27 日

Xrepo:一个现代化的跨平台 C/C++ 包管理器

Xrepo:一个现代化的跨平台 C/C++ 包管理器

資深大佬 : waruqi 0

xrepo 是一个基于 Xmake 的跨平台 C/C++ 包管理器。

  • 项目源码
  • 官方文档

它基于 xmake 提供的运行时,但却是一个完整独立的包管理程序,相比 vcpkg/homebrew 此类包管理器,xrepo 能够同时提供更多平台和架构的 C/C++ 包。

并且还支持多版本语义选择,另外它还是一个去中心化的分布式仓库,不仅仅提供了官方的 xmake-repo 仓库,还支持用户自建多个私有仓库。

同时,xrepo 也支持从 vcpkg/homebrew/conan 等第三方包管理器中安装包,并提供统一一致的库链接信息,方便与第三方项目的集成对接。

如果你想要了解更多,请参考:在线文档, Github 以及 Gitee

Xrepo:一个现代化的跨平台 C/C++ 包管理器

安装

我们只需要安装上 xmake 就可以使用 xrepo 命令,关于 xmake 的安装,我们可以看下:xmake 安装文档。

支持平台

  • Windows (x86, x64)
  • macOS (i386, x86_64, arm64)
  • Linux (i386, x86_64, cross-toolchains ..)
  • *BSD (i386, x86_64)
  • Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
  • iOS (armv7, armv7s, arm64, i386, x86_64)
  • MSYS (i386, x86_64)
  • MinGW (i386, x86_64, arm, arm64)
  • Cross Toolchains

支持的包管理仓库

  • 官方自建仓库 xmake-repo (tbox >1.6.1)
  • 用户自建仓库
  • Conan (conan::openssl/1.1.1g)
  • Vcpkg (vcpkg:ffmpeg)
  • Homebrew/Linuxbrew (brew::pcre2/libpcre2-8)
  • Pacman on archlinux/msys2 (pacman::libcurl)
  • Clib (clib::clibs/[email protected])
  • Dub (dub::log 0.4.3)

分布式仓库支持

除了可以直接从官方仓库:xmake-repo 检索安装包之外, 我们还可以添加任意多个自建的仓库,甚至可以完全隔离外网,仅仅在公司内部网络维护私有包的安装集成。

只需要通过下面的命令,添加上自己的仓库地址:

$ xrepo add-repo myrepo https://github.com/mygroup/myrepo 

与 xmake 的工程无缝集成

add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8") add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true}) target("test")     set_kind("binary")     add_files("src/*.c")     add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl") 

下面是与 xmake 集成的整体架构和编译流程。

Xrepo:一个现代化的跨平台 C/C++ 包管理器

快速上手

安装包

基本使用

$ xrepo install zlib tbox 

安装指定版本包

完整支持 Semantic Versioning (语义版本)。

$ xrepo install "zlib 1.2.x" $ xrepo install "zlib >=1.2.0" 

安装指定平台包

$ xrepo install -p iphoneos -a arm64 zlib $ xrepo install -p android [--ndk=/xxx] zlib $ xrepo install -p mingw [--mingw=/xxx] zlib $ xrepo install -p cross --sdk=/xxx/arm-linux-musleabi-cross zlib 

安装调试版本包

$ xrepo install -m debug zlib 

安装动态库版本包

$ xrepo install -k shared zlib 

安装指定配置包

$ xrepo install -f "vs_runtime=MD" zlib $ xrepo install -f "regex=true,thread=true" boost 

安装第三方包管理器的包

$ xrepo install brew::zlib $ xrepo install vcpkg::zlib $ xrepo install conan::zlib/1.2.11 $ xrepo install pacman:libpng $ xrepo install dub:log 

查找包的库使用信息

$ xrepo fetch pcre2 {   {     linkdirs = {       "/usr/local/Cellar/pcre2/10.33/lib"     },     links = {       "pcre2-8"     },     defines = {       "PCRE2_CODE_UNIT_WIDTH=8"     },     includedirs = "/usr/local/Cellar/pcre2/10.33/include"   } } 
$ xrepo fetch --ldflags openssl -L/Users/ruki/.xmake/packages/o/openssl/1.1.1/d639b7d6e3244216b403b39df5101abf/lib -lcrypto -lssl 
$ xrepo fetch --cflags openssl -I/Users/ruki/.xmake/packages/o/openssl/1.1.1/d639b7d6e3244216b403b39df5101abf/include 
$ xrepo fetch -p [iphoneos|android] --cflags "zlib 1.2.x" -I/Users/ruki/.xmake/packages/z/zlib/1.2.11/df72d410e7e14391b1a4375d868a240c/include 
$ xrepo fetch --cflags --ldflags conan::zlib/1.2.11 -I/Users/ruki/.conan/data/zlib/1.2.11/_/_/package/f74366f76f700cc6e991285892ad7a23c30e6d47/include -L/Users/ruki/.conan/data/zlib/1.2.11/_/_/package/f74366f76f700cc6e991285892ad7a23c30e6d47/lib -lz 

导出安装后的包

xrepo 可以快速导出已经安装后的包,包括对应的库文件,头文件等等。

$ xrepo export -o /tmp/output zlib 

搜索支持的包

$ xrepo search zlib "pcr*"     zlib:       -> zlib: A Massively Spiffy Yet Delicately Unobtrusive Compression Library (in xmake-repo)     pcr*:       -> pcre2: A Perl Compatible Regular Expressions Library (in xmake-repo)       -> pcre: A Perl Compatible Regular Expressions Library (in xmake-repo) 

查看包环境信息

$ xrepo env --show luajit {   OLDPWD = "/mnt/tbox",   HOME = "/home/ruki",   PATH = "/home/ruki/.xmake/packages/l/luajit/2.1.0-beta3/fbac76d823b844f0b91abf3df0a3bc61/bin:/tmp:/tmp/arm-linux-musleabi-cross/bin:~/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",   TERM = "xterm",   PWD = "/mnt/xmake",   XMAKE_PROGRAM_DIR = "/mnt/xmake/xmake",   HOSTNAME = "e6edd61ff1ab",   LD_LIBRARY_PATH = "/home/ruki/.xmake/packages/l/luajit/2.1.0-beta3/fbac76d823b844f0b91abf3df0a3bc61/lib",   SHLVL = "1",   _ = "/mnt/xmake/scripts/xrepo.sh" } 

加载执行包环境并运行命令

$ xrepo env luajit LuaJIT 2.1.0-beta3 -- Copyright (C) 2005-2017 Mike Pall. http://luajit.org/ JIT: ON SSE2 SSE3 SSE4.1 BMI2 fold cse dce fwd dse narrow loop abc sink fuse > 
$ xrepo env -b "luajit 2.x" luajit $ xrepo env -p iphoneos -b "zlib,libpng,luajit 2.x" cmake .. 

查看包信息

$ xrepo info zlib The package info of project:     require(zlib):       -> description: A Massively Spiffy Yet Delicately Unobtrusive Compression Library       -> version: 1.2.11       -> urls:          -> http://zlib.net/zlib-1.2.11.tar.gz             -> c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1          -> https://downloads.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz             -> c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1       -> repo: xmake-repo https://gitee.com/tboox/xmake-repo.git master       -> cachedir: /Users/ruki/.xmake/cache/packages/2010/z/zlib/1.2.11       -> installdir: /Users/ruki/.xmake/packages/z/zlib/1.2.11/d639b7d6e3244216b403b39df5101abf       -> searchdirs:       -> searchnames: zlib-1.2.11.tar.gz       -> fetchinfo: 1.2.11, system           -> version: 1.2.11           -> links: z           -> linkdirs: /usr/local/Cellar/zlib/1.2.11/lib           -> includedirs: /usr/local/Cellar/zlib/1.2.11/include       -> platforms: iphoneos, [email protected], macosx, [email protected],macosx, [email protected],macosx, windows, linux       -> requires:          -> plat: macosx          -> arch: x86_64          -> configs:             -> debug: false             -> vs_runtime: MT             -> shared: false       -> configs:       -> configs (builtin):          -> debug: Enable debug symbols. (default: false)          -> shared: Enable shared library. (default: false)          -> cflags: Set the C compiler flags.          -> cxflags: Set the C/C++ compiler flags.          -> cxxflags: Set the C++ compiler flags.          -> asflags: Set the assembler flags.          -> vs_runtime: Set vs compiler runtime. (default: MT)             -> values: {"MT","MD"} 

大佬有話說 (18)

  • 資深大佬 : mepwang

    nice job!

  • 資深大佬 : yazoox

    为什么不叫 crepo 或者 cpprepo,这个 xrepo 我都没想到是 c/c++包管理工具。
    没想到过了这么多年,c++也终于有包管理工具了。
    不错。看看。
    p.s.虽然多年不写 c/c++了(除了 leetcode )

  • 資深大佬 : northisland

    一颗赛艇。没想到 android ios 的微架构这么多

  • 主 資深大佬 : waruqi

    @yazoox `x` 开头,重点突出跨平台的概念,另外也考虑到是 基于 xmake 的。

  • 主 資深大佬 : waruqi

    @yazoox 还有就是除了 c/c++包,一些软件包 以及其他语言的包,只要能跟 C/C++一起参与混合编译链接的,也都可以收录安装。

  • 主 資深大佬 : waruqi

    @northisland 还好吧,arm, arm64 x86_64 主要也就这么几个。

  • 資深大佬 : omph

    类似 pkgbuild 吗?

  • 資深大佬 : PPing520

    膜拜大佬

  • 主 資深大佬 : waruqi

    @omph 跟 homebrew 的模式更像点,不过支持的平台更多

  • 資深大佬 : bfjm

    真不错

  • 資深大佬 : dbskcnc

    支持,不过生态是个问题,力量跟 cmake,vcpkg conna 这些加起来还是小太多了

  • 主 資深大佬 : waruqi

    @dbskcnc 这影响不大,xrepo 同样可以直接集成安装 vcpkg/conan 的包,只不过在这基础上,提供了更多特性和跨平台支持,比如:完全支持用户自建仓库,比如一些公司内部网络,可以自建私有仓库单独维护依赖包等等。

    而且如果前期生态不完善,有些包没有,用户完全可以很方便的切换包源到 vcpkg/conan,并不影响使用

    另外,目前已经有很多用户一直在帮忙贡献和丰富 xmake 的官方包源了,我相信之后会越来越完善~

  • 主 資深大佬 : waruqi

    万事开头难,但总归要有人迈出那一步,不能说因为生态不行,就放弃了,即使是 vcpkg/conan 也都是从 0 开始 一点点发展起来的,另外 xrepo 跟 vcpkg/conan 并不互斥,是相辅相成的关系,相互补充包源,如果有些 c/c++ 包,vcpkg/conan 里面没有对应平台支持,可以尝试 xrepo,当然也可以继续使用 vcpkg/conan 。

    后期 xrepo 除了已经对接集成 vcpkg/conan/clib/dun/pacman/homebrew 包之外,还会新增其他更多包仓库的集成,比如 apt/dnf 等等

  • 資深大佬 : vsitebon

    好活

  • 資深大佬 : AndyAO

    Xrepo:一个现代化的跨平台 C/C++ 包管理器

  • 資深大佬 : mrcn

    支持作者,谢谢作者的付出!

  • 資深大佬 : edimetia3d

    突然比较好奇, 主做这些工具感觉不太盈利 ,估计时间得投入不少,难道用爱发电吗?

  • 主 資深大佬 : waruqi

    @edimetia3d 是啊 持续发电中。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具