Переопределить скрипт сборки для зависимости - PullRequest
0 голосов
/ 21 февраля 2019

Я создаю Rust crate, который имеет транзитивные зависимости от нескольких *-sys ящиков, обертывающих нативные библиотеки.Ящики *-sys используют build.rs для создания собственных библиотек с помощью cmake, который не поддерживается в моей среде.

У меня уже есть эти собственные библиотеки, предварительно собранные в другом месте моего дерева проекта.Я бы хотел переопределить сценарии сборки , чтобы он не запускался, и вместо этого использовать существующие собственные библиотеки.

Если манифест содержит ключ ссылки, то Cargo поддерживает переопределение сценария сборкиуказано с пользовательской библиотекой.Цель этой функции - полностью запретить запуск соответствующего сценария сборки и вместо этого предоставить метаданные заблаговременно.

Чтобы переопределить сценарий сборки, поместите следующую конфигурацию в любое допустимое расположение конфигурации Cargo.

[target.x86_64-unknown-linux-gnu.foo]
rustc-link-search = ["/path/to/foo"]
rustc-link-lib = ["foo"]
root = "/path/to/foo"
key = "value"

Источник: Справочник по грузам> Сценарии сборки

Мое первоначальное предположение, основанное на этой документации, заключается в том, что мне просто нужно добавить rustc-link-lib при объявлении зависимости, но это, похоже, не работает.

[package]
# ...

[dependencies]
# ...
harfbuzz-sys = { version = "0.3", rustc-link-lib = ["harfbuzz"] }
# ...

Cargo все еще пытается вызвать build.rs и завершается неудачей.

Есть ли правильный способ переопределить harfbuzz-sys build.rs для всех его переходных иждивенцев в моем проекте?

1 Ответ

0 голосов
/ 21 февраля 2019

Вам необходимо поместить информацию о переопределении в один из файлов конфигурации Cargo .Например, для harfbuzz-sys вы можете поместить это в .cargo/config внутри вашего рабочего пространства:

[target.machine-vendor-os.harfbuzz]
rustc-link-search = ["/path/to/staging/usr/lib"]
rustc-link-lib = ["harfbuzz"]

Обратите внимание, что в первой строке:

  • machine-vendor-os должно бытьто же самое, что и значение, которое вы задаете для груза с помощью опции --target.
  • harfbuzz должно совпадать с ключом links, определенным в Cargo.toml вашей зависимости.1020 *

А во второй строке /path/to/staging/usr/lib - это путь, по которому ваша предварительно скомпилированная зависимость находится в системе сборки.

...