dependencies - 介子:如何生成“仅标头”依赖项
问题描述
我有一个依赖 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 ?
谢谢!
解决方案
不确定pkgconfig 模块需要一个库来链接是什么意思。但是如果是仅标头包,则不需要library() 。这应该有效:
pkgconfig = import('pkgconfig')
pkgconfig.generate(
name : 'myexec',
version : '1.0',
subdirs : ['.', 'myexec'])
(这里我假设头文件将安装到 ${PREFIX}/include/myexec 目录)
看起来您还缺少将 myexec 依赖项传播到生成的 .pc 文件中 - 但这是另一个问题。