Meson: как сгенерировать зависимость «только для заголовка»

#dependencies #meson-build

#зависимости #meson-build

Вопрос:

У меня есть исполняемый файл, который использует IPC в качестве внешнего интерфейса. Я компилирую этот exec, используя систему сборки meson. Внешний заголовок правильно экспортирован.

Я пытаюсь зарегистрировать это с помощью pkgconfig, но модулю pkgconfig нужна библиотека для ссылки. Здесь мне просто нужно объявить экспортированный файл заголовка, мне нужно объявление только для заголовка.

Вот выдержка из файла 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?

Спасибо!

Ответ №1:

Не уверен, что вы подразумеваете под модулем pkgconfig, для которого требуется библиотека для ссылки. Но в случае пакета только для заголовка не требуется library(). Это должно сработать:

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

(здесь я предполагаю, что заголовки будут установлены в $ {PREFIX}/include/myexec dir)

Похоже также, что вам не хватает распространения зависимостей myexec в сгенерированный файл .pc — но это другой вопрос.

Комментарии:

1. Это работает хорошо, первый аргумент для pkgconfig.generate() является необязательным. Но мне не хватало аргумента «name».

2. Кроме того, не могли бы вы подробнее рассказать о распространении зависимостей. Это действительно то, что я упустил из виду.

3. @adrien Я имею в виду, если ваша библиотека заголовков также зависит от какой-либо другой библиотеки — просто проверьте, распространяются ли они на Requireds: field или Clfags: (дополнительные включаемые каталоги), добавленные в результате declare_dependency (…)