【问题标题】:Meson: How to generate "header-only" dependency介子:如何生成“仅标头”依赖项
【发布时间】:2020-09-01 09:30:30
【问题描述】:

我有一个依赖 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 的选项?

谢谢!

【问题讨论】:

    标签: dependencies meson-build


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 这很好用,pkgconfig.generate() 的第一个参数是可选的。但我错过了“名称”参数。
    • 另外,您能否详细说明依赖关系传播。这确实是我忽略的。
    • @adrien 我的意思是,如果您的头库还依赖于其他库 - 只需检查它们是否传播到 Requires: field 或 Clfags: (附加包含目录) 添加为 declare_dependency(. ..)
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    相关资源
    最近更新 更多