#c #dependency-management #meson-build #zstd
#c #управление зависимостями #meson-build #zstd
Вопрос:
Я хочу использовать библиотеку сжатия zstd для моего проекта библиотеки C . Моя система сборки основана на meson. Мой файл meson.build выглядит следующим образом
project('foo', 'cpp', default_options :
['cpp_std=c 17', 'buildtype=release'],
version : '0.1', license: 'MIT')
subproject('zstd', default_options: 'builddir=build/meson')
Я создал файл zstd meson wrap subprojects/zstd.wrap
[wrap-file]
directory = zstd-1.4.5
source_url = https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz
source_filename = zstd-1.4.5.tar.gz
source_hash = 98e91c7c6bf162bf90e4e70fdbc41a8188b9fa8de5ad840c401198014406ce9e
При запуске meson compile
я получаю эту ошибку
../meson.build:5:0: ERROR: Subproject exists but has no meson.build file
Проблема, по-видимому, заключается в том, что zstd использует CMAKE в качестве системы сборки по умолчанию, а файл meson находится во build/meson
вложенной папке, а не в корне, где его ожидает meson. Я пытался:
- Использование
default_options: 'builddir=build/meson'
для подпроекта, но это не имело никакого эффекта - Построение zstd с использованием интеграции CMAKE, но не удалось из-за других ошибок, и это усложнило настройку
- Создание исправления для перемещения файлов сборки zstd meson на два каталога в корневой
zstd
каталог , но для этого потребовалось больше зависимостей, а позже произошел сбой с разрешением путей, поскольку zstd ожидает, что файлы находятся вbuild/meson
, а не в корневом каталоге.
Могу ли я легко создать zstd как подпроект meson для моей библиотеки C ?
Ответ №1:
В meson нет опции builddir, и с помощью default_options вы в любом случае можете установить только параметры проекта для этого подпроекта (zstd/build/meson/meson_options.txt ). Таким образом, я думаю, единственный способ решить эту проблему — создать патч, и он должен быть довольно простым:
-
создайте meson.build в каталоге корневых подпроектов
-
переместить проект (…) из zstd /build/meson/meson.build в этот
-
добавьте subdir, чтобы он содержал:
проект (…)
subdir(‘build’)
-
поместите однострочный meson.build в zstd / build
subdir(‘meson’)
Комментарии:
1. Верно, я пытался разобраться в этом, спасибо за разъяснение. Я не хотел слишком сильно отклоняться от исходного кода zstd и не хотел отслеживать, что меняется вверх по течению (если что-нибудь). Итак, я сделал исправление для официальной базы данных meson wrap, надеюсь, это можно принять, и я могу просто использовать однострочный
subproject ('zstd')
файл с файлом переноса. Между тем, я бы просто использовал более старую версию 1.3.3, доступную в базе данных, вот мой ПИАР github.com/mesonbuild/zstd/pull/4 для более новой версии, судя по тому, что я вижу, кому-то придется создавать архивированный патч вручную2. @oleksii спасибо, вы можете попробовать задать этот вопрос в meson googlegroup, где у вас больше шансов связаться с авторами: система сборки Meson <mesonbuild@googlegroups.com >. Я не работал с переносами, но из того, что я прочитал, и обнаружил, что изменить каталог невозможно — возможно, стоит запросить функцию. Если вы это сделаете, пожалуйста, дайте мне знать, мне было бы интересно узнать, какой вариант лучше…