如何在Meson中获取依赖库的文件名与路径(含子项目构建场景)
Meson中获取依赖库路径并自动复制的实现
一、获取依赖库的完整路径
不管依赖是系统已安装的库,还是通过fallback参数触发的wrapped子项目构建的库,都可以通过Dependency对象的find_library()方法直接获取库文件的完整路径:
# 首先获取Dependency对象 sdl2_dep = dependency('SDL2', version: '>=2', required: true, fallback: ['sdl2', 'sdl2_dep']) # 从Dependency对象中查找对应库文件 sdl2_lib = sdl2_dep.find_library('SDL2', required: true) # 获取库文件的完整路径 lib_full_path = sdl2_lib.full_path()
如果需要区分动态库的运行时文件(比如Windows下的.dll),可以结合get_variable()方法获取对应的目录:
# 获取运行时库所在目录(针对系统库或子项目构建的动态库) bindir = sdl2_dep.get_variable(pkgconfig: 'bindir', internal: 'bindir') # 拼接得到dll文件路径(以Windows为例) sdl2_dll = join_paths(bindir, 'SDL2.dll')
二、自动复制库文件到二进制目录
拿到库文件路径后,可通过custom_target在构建阶段自动将库文件复制到二进制输出目录,方便交叉编译后的测试:
custom_target('copy_sdl2_lib', input: lib_full_path, output: lib_full_path.filename(), command: ['cp', '@INPUT@', '@OUTPUT@'], # Windows环境下替换为:['cmd', '/c', 'copy', '@INPUT@', '@OUTPUT@'] install: false, build_by_default: true )
该目标会在每次构建时自动执行复制操作,无需手动干预,适配CI集成场景。
三、Dependency对象的文档指引
Meson官方文档中,关于Dependency对象的所有属性、方法及使用说明,可参考Dependency objects章节,其中详细列出了:
- 判断依赖是否找到的
found()方法 - 获取变量的
get_variable()方法(支持pkgconfig变量和子项目内部变量) - 查找库文件的
find_library()方法 - 获取编译参数、链接参数的相关方法等
内容的提问来源于stack exchange,提问作者Kagetsuki
相关产品推荐
相关产品推荐

