在meson.build中设置PKG_CONFIG_PATH

时间:2017-08-09 18:28:54

标签: pkg-config meson-build

我在几个C项目(projectAprojectB)中使用介子,其中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文件。

当我使用自定义安装前缀来构建projectAprojectB时,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目录对我来说很有意义。有办法吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

PKG_CONFIG_PATH设置为构建projectA.pc的{​​{1}}文件所在的位置。

是的,projectB是供用户使用的。但是,在这种情况下,编辑PKG_CONFIG_PATHprojectA的用户都是用户,即使也是。

ie)如果要编译projectB因为要针对安装到其他目​​录的新版本projectA测试projectB,则必须调整projectB。< / p>

是的,如果您将PKG_CONFIG_PATH projectB设为subproject,则对您的用户来说会更容易。