我最近在我的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
...那怎么可能?我以为是货物始终设定的?我想直接运行rustc
时可能会丢失它,但是运行cargo build --tests
时也可能会丢失它吗?
找到环境变量的代码在https://github.com/davidpdrsn/i18n_codegen/blob/master/src/lib.rs#L233。
主应用程序本身就是一个Cargo工作区,内部还有其他几个箱子,不确定是否重要。
我每晚在本地和CI上使用相同版本的Rust。
这是一个封闭源代码的工作项目,很遗憾,我无法轻松共享它。
答案 0 :(得分:2)
第一个和第二个错误无关:
CARGO_MANIFEST_DIR
由cargo
设置,因此,如果您手动运行rustc
,则必须自己设置变量,通常尝试完全不手动运行rustc
。