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)