Недавно я добавил зависимость в мое приложение Rust, которое содержит процедурный макрос.Этот процедурный макрос вызывается с i18n_codegen::i18n!("locales");
.Он найдет все файлы в каталоге locales
относительно CARGO_MANIFEST_DIR
.Насколько я понимаю, CARGO_MANIFEST_DIR
является корнем вашего ящика и устанавливается в Cargo.
Это прекрасно работает локально, но когда я пытаюсь собрать его на своем CI-сервере, происходит сбой с таким сообщением:
root@9eb2477f8a48:~# cd ./project/
root@9eb2477f8a48:~/project# cargo build --tests
Compiling i18n v0.1.0 (/root/project/i18n)
Compiling diesel-factories v0.0.1
Compiling rocket_contrib v0.4.0
error: Could not compile `i18n`.
Caused by:
process didn't exit successfully: `rustc --edition=2018 --crate-name i18n i18n/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=7a0984ff3e085e3a -C extra-filename=-7a0984ff3e085e3a --out-dir /root/project/target/debug/deps -C incremental=/root/project/target/debug/incremental -L dependency=/root/project/target/debug/deps --extern i18n_codegen=/root/project/target/debug/deps/libi18n_codegen-85460420d23be67d.so` (signal: 9, SIGKILL: kill)
warning: build failed, waiting for other jobs to finish...
error: Could not compile `i18n`.
Выполнение команды rustc дает
root@9eb2477f8a48:~/project# rustc --edition=2018 --crate-name i18n i18n/src/lib.rs --color always --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=7a0984ff3e085e3a -C extra-filename=-7a0984ff3e085e3a --out-dir /root/project/target/debug/deps -C incremental=/root/project/target/debug/incremental -L dependency=/root/project/target/debug/deps --extern i18n_codegen=/root/project/target/debug/deps/libi18n_codegen-85460420d23be67d.so
error: proc macro panicked
--> i18n/src/lib.rs:1:1
|
1 | i18n_codegen::i18n!("locales");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= help: message: Env var `CARGO_MANIFEST_DIR` was missing
error: aborting due to previous error
Кажется, что CARGO_MANIFEST_DIR
отсутствует ... Как это может быть?Я думал, что всегда был установлен Cargo?Я предполагаю, что он может отсутствовать при запуске rustc
напрямую, но как это может отсутствовать и при запуске cargo build --tests
?
Код, который находит env var здесь https://github.com/davidpdrsn/i18n_codegen/blob/master/src/lib.rs#L233.
Основное приложение само по себе - рабочее пространство Cargo с несколькими другими ящиками внутри, не уверен, что это имеет значение.
Я использую ту же версию Rust по ночам локально и на CI.
Itэто рабочий проект с закрытым исходным кодом, поэтому, к сожалению, я не могу с легкостью поделиться им.