2016-06-11 4 views
3

Существует третья сторона библиотеки C, с которой я бы хотел ссылаться в моем проекте Rust. Он размещается на github и компилируется только как статическая библиотека. Есть ли способ заставить Cargo получить эту зависимость для меня? Я думаю, что нет. Я попытался добавить его как зависимость и получил ошибку «Could not find Cargo.toml in ...».Как обращаться со сторонними статическими библиотеками C-библиотеки в Rust/Cargo?

В качестве альтернативы я подумал о том, чтобы модифицировать файл build.rs для использования ящика git2-rs для загрузки тега библиотеки, возможно, указанного в качестве имени тега, переданного через переменную среды.

Другой вариант - включить источник библиотеки C в мой проект, но я думал, что пользователи моего ящика хотят использовать другую (но совместимую) версию сторонней библиотеки с моим ящиком, они не сможет сделать это так легко.

Так как же другие люди в общении справляются с подобными ситуациями?

ответ

6

В общем, вы хотите создать libfoo-sys crate. Этот ящик будет иметь скрипт сборки, который компилирует собственную библиотеку и устанавливает параметры компоновщика.

Сценарий сборки может использовать зависимости времени сборки, такие как cc crate, чтобы упростить процесс загрузки и компиляции исходной библиотеки.

Вы можете использовать переменные среды или функции, чтобы выбрать, откуда приходит родная библиотека. Вы можете использовать тот, который уже установлен пользователем через диспетчера системных пакетов (или, возможно, скомпилированную вручную), вы могли бы скачать источник откуда-то, вы могли бы включить код в репозиторий, или вы могли бы использовать подмодуль git для ссылки другой репозиторий git вместо фактического копирования кода.