在meson.build中设置PKG_CONFIG_PATH



我在几个 C 项目(projectAprojectB(中使用介子,其中projectB链接到来自projectA的库。在projectA/meson.build中,我使用介子编写了一个pkg-configprojectA.pc文件,该文件按预期安装join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')

projectB/meson.build中,我使用dependency('projectA')来查找projectA.pc文件。

当我使用自定义安装前缀构建projectAprojectB时,meson在构建projectB时找不到projectA.pc。有没有办法从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())

projectB/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.builddependency()应该调查join_paths(get_option('prefix'), get_option('libdir'), 'pkgconfig')

我试图在介子dependency()调用中设置一个环境变量,但dependency()不存在env参数:

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)

不幸的是,依赖项中的env:参数被忽略(文档中不存在(。

将 ${prefix}/${libdir}/pkgconfig 目录附加到 meson 的 PKG_CONFIG_PATH 对我来说是有意义的。有没有办法做到这一点?

在IRC上询问后,我被告知PKG_CONFIG_PATH应该由用户(而不是我(设置,因此介子不提供更改它的方法。

在这种情况下,最好的方法是使用子项目或包装,以便介子一次处理所有内容。

PKG_CONFIG_PATH设置为构建projectBprojectA.pc文件所在的位置。

是的,PKG_CONFIG_PATH肯定是给用户的。 但是,在这种情况下,无论谁编译您的projectAprojectB都是用户,甚至也是。

即(当您因为要针对安装到不同目录的新版本的 projectA 测试projectB而想要编译projectB时,您必须调整PKG_CONFIG_PATH

是的,如果您projectBprojectA子项目进行设置,则您的用户会容易得多。

相关内容

  • 没有找到相关文章

最新更新