首页 > 解决方案 > 介子:如何生成“仅标头”依赖项

问题描述

我有一个依赖 IPC 作为外部接口的可执行文件。我使用介子构建系统编译这个 exec。外部标头已正确导出。

我正在尝试使用 pkgconfig 注册它,但是 pkgconfig 模块需要一个库来链接。这里我只需要声明导出的头文件,我需要一个header-only声明。

这是 meson.build 文件的摘录:

executable('myexec',
    src,
    include_directories : inc,
    dependencies : deps,
    install : true)

myexec = library('myexec')
pkgconfig = import('pkgconfig')
pkgconfig.generate(myexec)
    version : '1.0',
    subdirs : 'myexec')

install_headers('include/myexec.h',
    subdir : 'myexec')

有了这个,除了生成的 .pc 文件包含一个非空的 Libs 字段并且依赖 myexec.h 的客户端没有要链接的库之外,一切都很顺利:

prefix=/usr/local
libdir=${prefix}/lib/x86_64-linux-gnu
includedir=${prefix}/include

Name: myexec
Description: buttond: myexec
Version: 1.0
Libs: -L${libdir} -lmyexec       # here is my issue!
Cflags: -I${includedir}

链接从 myexec.h 调用的客户端可执行文件

/usr/bin/ld: cannot find -lmyexec

这是生成此类包的正确方法吗?我是否缺少 pkgconfig 模块的选项来强制生成正确的 .pc ?

谢谢!

标签: dependenciesmeson-build

解决方案


不确定pkgconfig 模块需要一个库来链接是什么意思。但是如果是仅标头包,则不需要library() 。这应该有效:

pkgconfig = import('pkgconfig')
pkgconfig.generate(
    name : 'myexec',
    version : '1.0',
    subdirs : ['.', 'myexec'])

(这里我假设头文件将安装到 ${PREFIX}/include/myexec 目录)

看起来您还缺少将 myexec 依赖项传播到生成的 .pc 文件中 - 但这是另一个问题。


推荐阅读