Xrepo:一个现代化的跨平台 C/C++ 包管理器 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
waruqi

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

  •  4
     
  •   waruqi
    waruqi 2020 年 11 月 25 日 3384 次点击
    这是一个创建于 1976 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    安装

    我们只需要安装上 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 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, mingw@windows, macosx, mingw@linux,macosx, android@linux,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"} 
    21 条回复    2021-03-29 18:21:22 +08:00
    mepwang
        1
    mepwang  
       2020 年 11 月 25 日 via iPhone
    nice job!
    yazoox
        2
    yazoox  
       2020 年 11 月 25 日
    为什么不叫 crepo 或者 cpprepo,这个 xrepo 我都没想到是 c/c++包管理工具。
    没想到过了这么多年,c++也终于有包管理工具了。
    不错。看看。
    p.s.虽然多年写 c/c++了(除了 leetcode )
    northisland
        3
    northisland  
       2020 年 11 月 25 日
    一颗赛艇。没想到 android ios 的微架构这么多
    waruqi
        4
    waruqi  
    OP
       2020 年 11 月 25 日
    @yazoox `x` 开头,重点突出跨平台的概念,另外也考虑到是 基于 xmake 的。
    waruqi
        5
    waruqi  
    OP
       2020 年 11 月 25 日
    @yazoox 还有就是除了 c/c++包,一些软件包 以及其他语言的包,只要能跟 C/C++一起参与混合编译链接的,也都可以收录安装。
    waruqi
        6
    waruqi  
    OP
       2020 年 11 月 25 日
    @northisland 还好吧,arm, arm64 x86_64 主要也就这么几个。
    omph
        7
    omph  
       2020 年 11 月 25 日
    类似 pkgbuild 吗?
    PPing520
        8
    PPing520  
       2020 年 11 月 25 日
    膜拜大佬
    waruqi
        9
    waruqi  
    OP
       2020 年 11 月 25 日
    @omph 跟 homebrew 的模式更像点,不过支持的平台更多
    bfjm
        10
    bfjm  
       2020 年 11 月 25 日
    真不错
    dbskcnc
        11
    dbskcnc  
       2020 年 11 月 25 日
    支持,不过生态是个问题,力量跟 cmake,vcpkg conna 这些加起来还是小太多了
    waruqi
        12
    waruqi  
    OP
       2020 年 11 月 25 日
    @dbskcnc 这影响不大,xrepo 同样可以直接集成安装 vcpkg/conan 的包,只不过在这基础上,提供了更多特性和跨平台支持,比如:完全支持用户自建仓库,比如一些公司内部网络,可以自建私有仓库单独维护依赖包等等。

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

    另外,目前已经有很多用户一直在帮忙贡献和丰富 xmake 的官方包源了,我相信之后会越来越完善~
    waruqi
        13
    waruqi  
    OP
       2020 年 11 月 25 日
    万事开头难,但总归要有人迈出那一步,不能说因为生态不行,就放弃了,即使是 vcpkg/conan 也都是从 0 开始 一点点发展起来的,另外 xrepo 跟 vcpkg/conan 并不互斥,是相辅相成的关系,相互补充包源,如果有些 c/c++ 包,vcpkg/conan 里面没有对应平台支持,可以尝试 xrepo,当然也可以继续使用 vcpkg/conan 。

    后期 xrepo 除了已经对接集成 vcpkg/conan/clib/dun/pacman/homebrew 包之外,还会新增其他更多包仓库的集成,比如 apt/dnf 等等
    vsitebon
        14
    vsitebon  
       2020 年 11 月 25 日
    好活
    AndyAO
        15
    AndyAO  
       2020 年 11 月 25 日
    mrcn
        16
    mrcn  
       2020 年 11 月 25 日   1
    支持作者,谢谢作者的付出!
    edimetia3d
        17
    edimetia3d  
       2020 年 11 月 25 日
    突然比较好奇, 楼主做这些工具感觉不太盈利 ,估计时间得投入不少,难道用爱发电吗?
    waruqi
        18
    waruqi  
    OP
       2020 年 11 月 26 日 via Android
    @edimetia3d 是啊 持续发电中。。
    szzhiyang
        19
    szzhiyang  
       2021 年 3 月 29 日
    @waruqi 但是 x 前缀也容易让人联想到 Xcode 。
    szzhiyang
        20
    szzhiyang  
       2021 年 3 月 29 日
    Xrepo 、Xmake 、Xcode 容易让人误会成是一家的。
    waruqi
        21
    waruqi  
    OP
       2021 年 3 月 29 日 via Android
    @szzhiyang 额 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5641 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 96ms UTC 06:15 PVG 14:15 LAX 23:15 JFK 02:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86