Rust app无法编译,因为缺少CARGO MANIFEST DIR环境变量

问题描述 投票:-1回答:1

我最近添加了一个依赖于我的Rust应用程序,其中包含一个过程宏。使用i18n_codegen::i18n!("locales");调用此过程宏。它将在locales目录中找到与CARGO_MANIFEST_DIR相关的所有文件。据我所知,CARGO_MANIFEST_DIR是你的箱子的根,并由货物设定。

这在本地工作正常,但当我尝试在我的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工作区,里面有一些其他的箱子,不确定是否重要。

我在本地和CI上使用相同版本的Rust。

这是一个封闭源代码的工作项目,所以不幸的是我无法轻易分享它。

rust rust-cargo
1个回答
2
投票

第一个和第二个错误是无关的:

  1. 失败,因为这个过程是从“某些地方”被杀死的(评论似乎解决了这个问题)。
  2. 失败,因为CARGO_MANIFEST_DIRcargo设置,所以如果你手动运行rustc你必须自己设置变量,通常尽量不要手动运行rustc
© www.soinside.com 2019 - 2024. All rights reserved.