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

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

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

1 ответ

Решение

Как задокументировано здесь и здесь

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

а также

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

Вместо этого вы можете использовать find_library() предоставлено compiler объект и include_directories(), 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)

Ссылаться на 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

В <workspace>/hello/meson.build:

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

В <workspace>/meson.build:

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

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

Другие вопросы по тегам