MesonBuild: Как определить зависимость от библиотеки, которую не может найти `pkg-config`?

Во время сборки мой проект (на языке C) зависит от сторонних разработчиков. Но сторонняя библиотека по умолчанию установлена ​​в /opt/ вместо /lib, и я не могу найти ее в pkg-config. Из документации mesonbuild, следует ли мне использовать declare_dependency, у меня нет его исходного кода, чтобы рассматривать его как свой подпроект. Если я использую dependency() для его определения, я не могу найти правильный аргумент для определения настраиваемого местоположения.

Как объявить зависимость для нестандартной сторонней библиотеки?


person Chong    schedule 30.10.2017    source источник


Ответы (2)


Как описано здесь и здесь

Основной вариант использования этого [declare_dependency()] - в подпроектах.

а также

[dependency()] находит внешнюю зависимость ... с pkg-config [или] логикой определения отката для конкретной библиотеки ...

Вместо этого вы можете использовать find_library(), предоставленный объектом compiler и _ 6_. find_library() возвращает объект точно так же, как тот, который возвращает declare_dependency(). include_directories() возвращает непрозрачный объект, содержащий каталоги.

Предполагая, что вы используете компилятор C и вашу стороннюю библиотеку и ее заголовочный файл /opt/hello/libhello.so и /opt/hello/hello.h, вы можете:

project('myproj', 'c')

cc = meson.get_compiler('c')
lib_hello = cc.find_library('hello',
               dirs : ['/opt/hello'])
inc_hello = include_directories('/opt/hello')
exec = executable('app',
                  'main.c',
                  dependencies : [lib_hello],
                  include_directories : inc_hello)
person Yasushi Shoji    schedule 31.10.2017
comment
Получаю ошибку - Search directory opt/hello is not an absolute path.. Любая идея? - person Royi; 21.04.2019
comment
Исходя из сообщения об ошибке, вы забыли добавить начальный /? - person Yasushi Shoji; 21.04.2019
comment
Я не после /opt/hello, потому что использую Windows. Я просто хочу прокомментировать, что по какой-то причине dirs требует абсолютного пути. - person Royi; 21.04.2019

См. meson объект здесь: current_source_dir () метод возвращает строку в текущий исходный каталог.

Используйте его, если libhello.so и libhello.h находятся в <workspace>/hello каталоге.

<workspace>/main.c
<workspace>/meson.build

<workspace>/hello/libhello.so
<workspace>/hello/libhello.h
<workspace>/hello/meson.build

In <workspace>/hello/meson.build:

lib_hello = cc.find_library('hello', dirs : meson.current_source_dir())

In <workspace>/meson.build:

project('myproj', 'c')
subdir('hello')

inc_hello = include_directories('./')
exec = executable('app',
                  'main.c',
                  dependencies : [lib_hello],
                  include_directories : inc_hello)

person Tạ Lục Gia Hoàng    schedule 27.05.2020