由于缺少CARGO\u MANIFEST\u DIR环境变量,Rust应用程序无法编译
我最近在我的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
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
,这是一个有用的见解,这个问题/答案给出了一个具体的例子。