我有一个带有多个包的工作空间项目,其中两个重要的包是:
flowc
- 既是库又是二进制文件flowstdlib
flowc
是一种编译器,是我在项目中构建的一部分。
flowstdlib
有一个构建脚本,使用 flowc
的二进制文件来构建该包(生成“代码”、文件等),因此在构建 flowstdlib
时需要准备好 flowc
编译器。
在 flowstdlib
的 cargo.toml
中,我将 flowc
定义为构建依赖项:
[build-dependencies]
flowc = {path = "../flowc", version = "0.31.0" }`
(我尝试将其作为依赖项,但没有变化)
在 flowstdlib
的 build.rs
中,我在路径中查找它,如果在 ../target/debug/flowc
位置找不到:
let flowc = if Path::new(env!("CARGO_MANIFEST_DIR")).join("../target/debug/flowc").exists() {
"../target/debug/flowc"
} else if Simpath::new("PATH").find_type("flowc", FileType::File).is_ok() {
"flowc"
} else {
""
};
当我运行构建时,它似乎正在尝试同时并行构建多个软件包:
Compiling flowstdlib v0.31.0 (/Users/andrew/workspace/flow/flowstdlib)
Compiling flowsamples v0.31.1 (/Users/andrew/workspace/flow/samples)
warning: Could not find `flowc` in $PATH or `target/debug`, so cannot build flowstdlib
error: failed to run custom build command for `flowsamples v0.31.1 (/Users/andrew/workspace/flow/samples)`
flowstdlib
的构建失败是因为flowc
二进制文件尚未构建完成。
由于构建过程会继续进行并最终完成flowc
的构建,如果重新运行构建,则第二次将成功执行(因为现在可以找到flowc
二进制文件)。
因此:
- 看起来
build-dependency
确实会等待所依赖的二进制文件被构建完成(也许它会等待库文件被构建完成,很难确定)
问题
如何使flowstdlib
的构建等待flowc
二进制文件完成?
(不强制进行非并行构建)
flowc
的核心逻辑重构为库,并依赖于它吗? - Lambda Fairy