技术解析
xmake 一直在努力解决 C/C++ 包依赖管理和使用问题,为了方便 C/C++ 开发者能够快速集成使用 C/C++ 依赖包,我们在 xmake-repo 包仓库中已经维护了将近 300 个常用包
尽管还远远不如 vcpkg, conan 提供的包多,但是我们提供了更加强大的特性支持:版本语义支持,交叉编译包支持,更多的平台支持,定制化包配置编译安装,编译工具链包远程拉取支持等等
为了更加丰富我们的包仓库,提供更多优质的 C/C++ 库给用户快速集成和使用,现向广大开源作者征集 C/C++ 库。
如果你是 C/C++ 库开源作者,只要您的库满足以下条件:
那么,可以通过回复留言的方式,告知于我,我都会陆续将其收录到我们的包仓库,方便用户能够快速使用您的库。
回复方式:
不过由于我个人时间精力有限,具体收录时间会有些滞后,如果没有及时收录,请耐心等待
当然,如果你有时间,也可以参考文档,自己提交到我们的仓库,过程也非常简单:提交包到 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是一个现代化的 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