我在几个C项目(projectA
和projectB
)中使用介子,其中projectB
链接到projectA
的库。在projectA/meson.build
中,我使用meson编写了一个pkg-config
projectA.pc
文件,该文件已按预期安装到join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
。
在projectB/meson.build
我使用dependency('projectA')
查找projectA.pc
文件。
当我使用自定义安装前缀来构建projectA
和projectB
时,meson
在构建projectA.pc
时无法找到projectB
。有没有办法从PKG_CONFIG_PATH
指定projectB/meson.build
?
使用此最小示例:
重现此问题了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')
?
我试图在meson dependency()
调用中设置环境变量,但env
的{{1}}参数不存在:
dependency()
不幸的是,依赖项中的pkgconfigpath = join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')
message('pkgconfig: @0@'.format(pkgconfigpath))
env_pkgconfig = environment()
env_pkgconfig.set('PKG_CONFIG_PATH', pkgconfigpath)
projectA_dep = dependency('projectA', env: env_pkgconfig)
参数被忽略(它在文档中不存在)。
从meson向PKG_CONFIG_PATH追加$ {prefix} / $ {libdir} / pkgconfig目录对我来说很有意义。有办法吗?
答案 0 :(得分:0)
在询问IRC后,我被告知PKG_CONFIG_PATH
应由用户(而不是我)设置,因此介子不提供更改方法。
在这种情况下,最好的方法是使用子项目或包装,以便介子一次处理所有内容。
答案 1 :(得分:0)
将PKG_CONFIG_PATH
设置为构建projectA
时.pc
的{{1}}文件所在的位置。
是的,projectB
是供用户使用的。但是,在这种情况下,编辑PKG_CONFIG_PATH
和projectA
的用户都是用户,即使你也是。
ie)如果要编译projectB
因为要针对安装到其他目录的新版本projectA测试projectB
,则必须调整projectB
。< / p>
是的,如果您将PKG_CONFIG_PATH
projectB
设为subproject,则对您的用户来说会更容易。