由于缺少CARGO\u MANIFEST\u DIR环境变量,Rust应用程序无法编译

由于缺少CARGO\u MANIFEST\u DIR环境变量,Rust应用程序无法编译,rust,rust-cargo,Rust,Rust Cargo,我最近在我的Rust应用程序中添加了一个依赖项,其中包含一个过程宏。此过程宏是通过i18n\u codegen::i18n!调用的!(“地区”)。它将找到区域设置目录中与货物清单目录相关的所有文件。据我所知,CARGO\u MANIFEST\u DIR是您的板条箱的根目录,由CARGO设置 这在本地运行良好,但当我尝试在CI服务器上构建它时,它失败,并显示以下消息: root@9eb2477f8a48:~# cd ./project/ root@9eb2477f8a48:~/project# c

我最近在我的Rust应用程序中添加了一个依赖项,其中包含一个过程宏。此过程宏是通过
i18n\u codegen::i18n!调用的!(“地区”)。它将找到
区域设置
目录中与
货物清单
目录相关的所有文件。据我所知,
CARGO\u MANIFEST\u 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
似乎缺少
货物舱单\u目录
。。。这怎么可能?我以为那总是由货物决定的?我猜当直接运行
rustc
时它可能会丢失,但是当运行
cargo build--tests
时它怎么也会丢失呢

查找env变量的代码在这里

主应用程序本身就是一个货物工作区,里面还有一些其他的板条箱,不确定这是否重要

我每晚都在本地和CI上使用相同版本的Rust


这是一个封闭源代码的工作项目,因此很遗憾,我无法轻松共享它。

第一个和第二个错误是不相关的:

  • 失败,因为该进程是从“某个地方”终止的(这些评论似乎已经解决了这个问题)
  • 失败,因为
    CARGO\u MANIFEST\u DIR
    是由
    CARGO
    设置的,因此如果手动运行
    rustc
    ,您必须自己设置变量,通常不要手动运行
    rustc

  • 好吧,你在这里混淆了两个问题,如果你用
    rustc
    启动,显然货物会丢失!但是看起来rustc已经被操作系统杀死了,这看起来像是一个bug,没有足够的内存?“这是一个封闭源代码的工作项目,所以不幸的是我不能轻松地共享它。”希望你可以构建一个单独的项目,重现同样的问题。考虑到您正在使用夜间工具链,您需要指定哪一个。@Stargateur这似乎就是原因。我在本地进行了清理构建,rustc的内存使用率达到了6GB,建议避免
    rustc
    和一般使用
    cargo
    ,这是一个有用的见解,这个问题/答案给出了一个具体的例子。