Xmake 内置支持包依赖集成,可以通过 add_requires 接口声明需要的依赖包。
然后通过 add_packages 接口,将声明的包绑定到需要的编译目标中去,例如:
add_requires("tbox 1.6.*", "libpng ~1.16", "zlib")
target("foo")
set_kind("binary")
add_files("src/*.c")
add_packages("tbox", "libpng")
target("bar")
set_kind("binary")
add_files("src/*.c")
add_packages("zlib")
其中 add_requires 是全局接口,用于包的配置声明,Xmake 会根据声明的包来触发查找安装。
由于一个工程,可能存在多个目标程序,每个目标程序可能需要的依赖包是不同的,因此我们还需要通过 add_packages 来将绑定目标。
上面的配置示例中,foo 目标绑定了 tbox 和 libpng 两个包,而 bar 目标绑定了 zlib 包。
add_requires("pkgname") 声明依赖包,支持版本、可选、别名等add_packages("pkgname") 绑定包到目标,自动追加 links、includedirs 等add_requires("tbox 1.6.*", "libpng ~1.16", "zlib")
add_requires("foo", {optional = true})
add_requires("foo", {system = false})
add_requires("foo", {alias = "myfoo"})
add_packages("myfoo")
add_requires("foo", {plat = "windows", arch = "x64"})
add_requires("tbox", {configs = {small = true}})
add_requireconfs("spdlog.fmt", {configs = {header_only = true}})
在自定义规则、after_install 等脚本中可用:
package:name() 获取包名package:version_str() 获取包版本package:installdir() 获取包安装目录package:get("links") 获取链接库package:get("includedirs") 获取头文件目录add_requires("foo", {optional = true})
target("bar")
add_packages("foo")
add_requires("tbox master")
add_requires("zlib 1.2.11")
add_requires("spdlog", {configs = {header_only = true}})
local-repo/packages/foo/xmake.lua)。在 xmake.lua 中添加本地仓库:
add_repositories("myrepo local-repo")
add_requires("foo")
本地包描述文件结构示例:
local-repo/
packages/
foo/
xmake.lua
这样即可像官方包一样通过 add_requires("foo") 使用本地包。
add_requires + add_packages 组合声明和绑定{optional = true},提升兼容性{plat=..., arch=...} 精准控制add_requireconfs 递归配置依赖包xmake require --info pkg 查询包参数