![89c93431bcc87364db52011cf1396ad7.png](https://img-blog.csdnimg.cn/img_convert/89c93431bcc87364db52011cf1396ad7.png)
此版本耗时四个多月,对包依赖管理进行了重构改进,官方仓库新增了 mysql,ffmpeg 等常用依赖包,并且新增了大量新特性。
最近我打算对 xmake 的包仓库xmake-repo扩充一些常用的 C/C++包。
大家有哪些经常使用到的包,都可以提到 https://github.com/xmake-io/xmake-repo/issues/10 里面去,我之后会优先入库进去,提供给用户快速集成和使用依赖包。
关于新特性的详细说明见文章下文。
- 项目源码
- 官方文档
- 个人主页
第三方包管理器支持
新版本对内置的包管理进行了重构,已经支持的非常完善了,我们可以通过
add_requires("libuv master", "ffmpeg", "zlib 1.20.*")
方便的安装使用依赖包,但是官方的包仓库xmake-repo目前收录的包还非常少,因此为了扩充 xmake 的包仓库, xmake 新增了对第三方包管理器的内置支持,通过包命名空间显式指定其他包管理器中的包,目前支持对conan::
,brew::
和vcpkg::
包管理中的包进行安装。
安装 homebrew 的依赖包
add_requires("brew::zlib", {
alias = "zlib"}})
add_requires("brew::pcre2/libpcre2-8", {
alias = "pcre2"}})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("pcre2", "zlib")
安装 vcpkg 的依赖包
add_requires("vcpkg::zlib", "vcpkg::pcre2")
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("vcpkg::zlib", "vcpkg::pcre2")
不过需要注意的是,使用 vcpkg,需要先对 vcpkg 与 xmake 进行集成才行,详细操作如下:
windows 上用户装完 vcpkg 后,执行$ vcpkg integrate install
,xmake 就能自动从系统中检测到 vcpkg 的根路径,然后自动适配里面包。
当然,我们也可以手动指定 vcpkg 的根路径来支持:
$ xmake f --vcpkg=f:vcpkg
安装 conan 的依赖包
新版本实现了对 conan 的 generator,来集成获取 conan 中的包信息,我们在 xmake 中使用也是非常的方便,并且可以传递 conan 包的所有配置参数。
add_requires("conan::zlib/1.2.11@conan/stable", {
alias = "zlib", debug = true})
add_requires("conan::OpenSSL/1.0.2n@conan/stable", {
alias = "openssl", configs = {
options = "OpenSSL:shared=True"}})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("openssl", "zlib")
执行 xmake 进行编译后:
ruki:test_package ruki$ xmake
checking for the architecture ... x86_64
checking for the Xcode directory ... /Applications/Xcode.app
checking for the SDK version of Xcode ... 10.14
note: try installing these packages (pass -y to skip confirm)?
-> conan::zlib/1.2.11@conan/stable (debug)
-> conan::OpenSSL/1.0.2n@conan/stable
please input: y (y/n)
=> installing conan::zlib/1.2.11@conan/stable .. ok
=> installing conan::OpenSSL/1.0.2n@conan/stable .. ok
[ 0%]: ccache compiling.release src/main.c
[100%]: linking.release test
内置依赖包查找支持
之前的版本提供了lib.detect.find_package
来对依赖库进行查找,但是这需要通过 import 后才能使用,并且一次只能查找一个包,比较繁琐:
target("test")
set_kind("binary")
add_files("src/*.c")
on_load(function (target)
import("lib.detect.find_package")
target:add(find_package("openssl"))
target:add(find_package("zlib"))
end)
而新版本中通过内置find_packages
接口,对lib.detect.find_package
进行了进一步的封装,来提升易用性:
target("test")
set_kind("binary")
add_files("src/*.c")
on_load(function (target)
target:add(find_packages("openssl", "zlib"))
end)
并且还支持从指定的第三方包管理器中进行查找:
find_packages("conan::OpenSSL/1.0.2n@conan/stable", "brew::zlib")
参数配置依赖包安装
新版本中对内置的包管理进行了大规模重构和升级,并且对参数可配置编译安装依赖包进行了更好的支持,我们可以在包仓库中定义一些编译安装配置参数,来定制安装包。
例如, 我们以 pcre2 的包为例:
package("