V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waruqi
V2EX  ›  程序员

开源 C/C++ 库征集

  •  2
     
  •   waruqi ·
    waruqi · 2021-03-29 08:34:17 +08:00 · 2868 次点击
    这是一个创建于 1320 天前的主题,其中的信息可能已经有所发展或是发生改变。

    xmake 一直在努力解决 C/C++ 包依赖管理和使用问题,为了方便 C/C++ 开发者能够快速集成使用 C/C++ 依赖包,我们在 xmake-repo 包仓库中已经维护了将近 300 个常用包

    尽管还远远不如 vcpkg, conan 提供的包多,但是我们提供了更加强大的特性支持:版本语义支持交叉编译包支持更多的平台支持定制化包配置编译安装编译工具链包远程拉取支持等等

    为了更加丰富我们的包仓库,提供更多优质的 C/C++ 库给用户快速集成和使用,现向广大开源作者征集 C/C++ 库。

    如果你是 C/C++ 库开源作者,只要您的库满足以下条件:

    1. github star >=300
    2. 长期活跃维护
    3. 有完善的 README 介绍
    4. 有至少一种构建工具维护:autotools, cmake, xmake, scons, meson, gnumake ...

    那么,可以通过回复留言的方式,告知于我,我都会陆续将其收录到我们的包仓库,方便用户能够快速使用您的库。

    回复方式:

    • 库描述:xxx
    • 仓库地址:xxx
    • 主要贡献者:xxx

    不过由于我个人时间精力有限,具体收录时间会有些滞后,如果没有及时收录,请耐心等待

    当然,如果你有时间,也可以参考文档,自己提交到我们的仓库,过程也非常简单:提交包到 xmake 仓库说明

    其实就是类似 homebrew 的维护方式,一个包的定义大概就是下面这样

    package("libogg")
    
        set_homepage("https://www.xiph.org/ogg/")
        set_description("Ogg Bitstream Library")
    
        set_urls("https://gitlab.xiph.org/xiph/ogg/-/archive/$(version)/ogg-$(version).tar.gz",
                 "https://gitlab.xiph.org/xiph/ogg.git")
        add_versions("v1.3.4", "62cc64b9fd3cf57bde3a9033e94534ba34313d2bb9698029f623121a4e47bb9b")
        add_patches("v1.3.4", path.join(os.scriptdir(), "patches", "1.3.4", "macos_fix.patch"), "e12c41ad71206777f399c1048914e5e5a2fe44e18d0d50ebe9bedbfbe0624c35")
    
        add_deps("cmake")
        if is_plat("cross") and is_subhost("windows") then
            add_deps("make")
        end
    
        on_install("windows", "macosx", "linux", "mingw", "iphoneos", "android", "cross", function (package)
            local configs = {"-DBUILD_TESTING=OFF"}
            table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
            table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
            table.insert(configs, "-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
            import("package.tools.cmake").install(package, configs)
        end)
    
        on_test(function (package)
            assert(package:has_cfuncs("ogg_sync_init", {includes = {"stdint.h", "ogg/ogg.h"}}))
        end)
    

    如果您不是开源库作者,但是有想使用的 C/C++ 库,也可以回复到 issues#10,后续有时间,我也会考虑收录。

    xmake 介绍

    xmake是一个现代化的 C/C++ 构建工具,它提供了方便快捷的 C/C++ 依赖包管理和集成支持

    xmake 不仅能够快速集成使用 vcpkg, conan, brew, pacman, clib, dub 等包管理器中的包,也有自建的包管理器,以及自有包仓库维护 xmake-repo

    集成使用方式非常简单,同时支持多版本语义支持,例如:

    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")
    

    同时,我们也提供了独立的 cli 包管理工具 xrepo,用于方便管理维护 c/c++ 包,例如:

    $ xrepo install "zlib 1.2.x"
    $ xrepo install zlib "tbox >=1.6"
    $ 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
    

    相关链接

    14 条回复    2021-07-01 19:53:03 +08:00
    yitingbai
        1
    yitingbai  
       2021-03-29 08:45:07 +08:00
    C++的包管理真是永远的痛
    waruqi
        2
    waruqi  
    OP
       2021-03-29 08:50:27 +08:00 via Android
    @yitingbai 使用 xmake 可以减少痛苦
    Chenamy2017
        3
    Chenamy2017  
       2021-03-29 09:12:13 +08:00
    看着不错啊,点赞
    QBugHunter
        4
    QBugHunter  
       2021-03-29 10:14:57 +08:00
    比 Cmake 的优势是?
    waruqi
        5
    waruqi  
    OP
       2021-03-29 10:17:17 +08:00
    @QBugHunter cmake 没有内置的包管理,只能对接 vcpkg/conan,并且 xmake 还支持远程自动拉取交叉编译工具链,以及对依赖包做交叉编译,即使是 vcpkg/conan 也不支持编译工具链的管理
    dbskcnc
        6
    dbskcnc  
       2021-03-29 10:37:50 +08:00
    支持,虽然还没用上
    joshua7v
        7
    joshua7v  
       2021-03-29 14:11:43 +08:00
    看了下 ffmpeg 还没支持 windows ?
    waruqi
        8
    waruqi  
    OP
       2021-03-29 14:26:09 +08:00
    @joshua7v 有些库还没,得看库自身的构建系统支持,如果是 cmake/scons/meson/xmake 维护的,windows 基本上都能快速支持,而 ffmpeg 仅有 autotools,理论上也能做成 windows 支持,至少 mingw on msys2 的可以搞

    但是需要目前以我一个人的人力 暂时没时间弄,对于不支持的平台,暂时可以切到 vcpkg/conan 包,也许将来有时间了,我也会整进去
    waruqi
        9
    waruqi  
    OP
       2021-03-29 18:23:05 +08:00 via Android
    挂了一天 也没来一个库,哎。
    zoumouse
        10
    zoumouse  
       2021-03-30 00:06:46 +08:00
    可以支持下 grpc gflags brpc braft 等
    HiCode
        11
    HiCode  
       2021-06-20 12:52:57 +08:00
    @waruqi 大佬能不能支持一下 quickjs https://bellard.org/quickjs/
    HiCode
        12
    HiCode  
       2021-06-20 12:54:13 +08:00
    库描述:QuickJS

    QuickJS is a small and embeddable Javascript engine. It supports the ES2020 specification including modules, asynchronous generators, proxies and BigInt.

    仓库地址: https://github.com/bellard/quickjs

    主要贡献者:bellard
    waruqi
        13
    waruqi  
    OP
       2021-07-01 18:55:42 +08:00 via Android
    HiCode
        14
    HiCode  
       2021-07-01 19:53:03 +08:00
    @waruqi 已提交,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1135 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 18:47 · PVG 02:47 · LAX 10:47 · JFK 13:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.