在meson.build中设置PKG_CONFIG_PATH
我在几个C项目(projectA
和projectB
)中使用介子,其中projectB
从projectA
链接到库。在projectA/meson.build
中,我写了一个使用介子的pkg-config
projectA.pc
文件,它按预期安装到join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
。在meson.build中设置PKG_CONFIG_PATH
在projectB/meson.build
我使用dependency('projectA')
来查找projectA.pc
文件。
当我使用一个自定义安装前缀建立projectA
和projectB
,meson
无法找到projectA.pc
建设projectB
时。有没有办法从projectB/meson.build
指定PKG_CONFIG_PATH
?
这个问题重现这个小例子:
了projectA/meson.build:
project('projectA', 'c', version: '1')
pkg = import('pkgconfig')
pkg.generate(name : 'projectA',
description: 'ProjectA',
version: meson.project_version())
项目B/meson.build:
project('projectB', 'c', version: '1')
dep = dependency('projectA')
命令:
meson buildA projectA --prefix=$PWD/install
(cd buildA && ninja install)
#[0/1] Installing files.
#Installing /tmp/test/buildA/meson-private/projectA.pc to /tmp/test/install/lib/x86_64-linux-gnu/pkgconfig
# [ The error: ]
meson buildB projectB --prefix=$PWD/install
#Native dependency 'projectA' not found
# [ My workaround: ]
PKG_CONFIG_PATH="$PWD/install/lib/x86_64-linux-gnu/pkgconfig" meson buildB projectB --prefix=$PWD/install
# Native dependency projectA found: YES 1
有没有办法告诉projectB/meson.build
是dependency()
应该考虑join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
?
我想有一个环境变量介子dependency()
调用内部设置,但env
参数不为dependency()
存在:
pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
message('pkgconfig: @[email protected]'.format(pkgconfigpath))
env_pkgconfig = environment()
env_pkgconfig.set('PKG_CONFIG_PATH', pkgconfigpath)
projectA_dep = dependency('projectA', env: env_pkgconfig)
不幸的依赖性env:
参数被忽略(它不存在文档)。
从介子添加$ {prefix}/$ {libdir}/pkgconfig目录到PKG_CONFIG_PATH对我来说很有意义。有没有办法做到这一点?
在IRC询问后,我被告知PKG_CONFIG_PATH
应该由用户(而不是我)设置,所以介子不提供改变它的方法。
在这种情况下,最好的方法是使用子项目或包裹,因此介子一次处理所有内容。
设置PKG_CONFIG_PATH
到任何地方projectA
的.pc
文件是当您生成projectB
时。
是的,PKG_CONFIG_PATH
是肯定的用户。但是,在这种情况下,谁编译你的projectA
和projectB
是一个用户,即使你都是。
ie)当你想编译projectB
因为你想测试projectB
对新版本的projectA安装到不同的目录,那么你必须调整PKG_CONFIG_PATH
。
是的,如果您将projectB
的projectA
设置为subproject,那么您的用户会更容易。