Мезон: как заставить find_library () работать с необычным путем? - PullRequest
1 голос
/ 16 января 2020

Для моего Meson проекта у меня есть зависимость, которая находится в "необычном" месте:

/opt/MyDependence/lib/libmyLib.so
/opt/MyDependence/include/myLib.hpp

Мой файл мезона:

project('Test', ['cpp'])

cpp = meson.get_compiler('cpp')
myLib_dep = cpp.find_library('myLib', required: true)

Очевидно, Мезон не может найти библиотеку

Meson.build:5:0: ERROR: C++ library 'myLib' not found

Проблема в том, что я не знаю "канонического" способа добавления дополнительных путей поиска, чтобы Мезон мог найти мою библиотеку. Любая идея?


обновление: обратите внимание, что даже если я использую:

meson --libdir=/opt/MyDepedence/lib build

, я получаю это сообщение об ошибке:

meson.build:1:0: ERROR: The value of the 'libdir' option is '/opt/MyDepedence/lib' which must be a subdir of the prefix '/usr/local'.
Note that if you pass a relative path, it is assumed to be a subdir of prefix.

Ответы [ 2 ]

1 голос
/ 17 января 2020

Стандартный способ решить эту проблему - использовать pkg-config . Вкратце, процедура установки библиотеки должна включать этап, на котором генерируется специальный файл " mylib.p c" (с нуля или, как правило, из шаблона " mylib.p c .in"- поиск по inte rnet, примеров много). Затем эти небольшие файлы значения ключа, содержащие информацию о каталогах include / library, зависимостях и т. Д. c, устанавливаются в известное место, обычно / usr / lib / pkgconfig / . Meson естественным образом запускает pkg-config изнутри и находит вашу библиотеку, когда у вас есть что-то вроде

mylib_dep = dependency('mylib', required: true)

в вашем meson.build .

Обновлении

Относительно ошибки опции libdir meson, вы можете попробовать добавить опцию prefix :

meson --prefix=/opt/MyDepedence --libdir=lib build

Обратите внимание, что с этим командная строка, которую вы на самом деле вызываете неявно setup command (нет команды build , поскольку вы будете собирать с помощью ninja), а build - это каталог сборки, который будет создан используя ваши варианты. Проверьте это . Вот почему так лучше написать:

meson setup build_dir --prefix=/opt/MyDepedence --libdir=lib
0 голосов
/ 16 января 2020

Я наконец-то получил решение, надо использовать LIBRARY_PATH

export LIBRARY_PATH=/opt/MyDepedence/lib
meson build

Примечание: внимание, это не LD_LIBRARY_PATH, см. там для разница

Также прочитайте это Мезон / Issues / 217 . Для Windows эквивалент LIBRARY_PATH, по-видимому, равен LIBPATH (но я не смог проверить, поскольку я работаю только под Linux).


Альтернативой является «вручную» определить новую зависимость. В вашем проекте Meson:

project('Test, ['cpp'])

myLib_dep = declare_dependency(link_args : ['-L/opt/MyDependence/lib', '-lmyLib'],
                               include_directories : ['/opt/MyDependence/include'])


exe1 = executable('main', ['main.cpp'], dependencies : [myLib_dep])

Уточнение, которое можно сделать, - сохранить эту «ручную» настройку в meson_options.txt .


Примечание: я наконец-то ответил на мой вопрос, но я все еще открыт для лучших решений.

...