使用cargo构建子模块二进制crate

3

我有以下的包结构:

|── proj/
    └── src/
        └── bin/
            └── foo-bin-rs/
                └── src/
                    └── main.rs
                └── Cargo.toml
        └── main.rs
    └── Cargo.toml
    └── build.rs
foo-bin-rs是一个子模块。我想找到一种干净的方式通过cargo发出构建命令,以便将foo-bin-rs作为用于proj的构建命令的一部分进行构建。我没有找到任何使用二进制文件的src/bin目录的文档,这些二进制文件是它们自己独立的crate,而不是单个文件。我的第一个想法是有一个build.rs发出自己的cargo命令,但我找不到一个允许传递要用作根目录的目录的标志。对此,有没有标准做法?

我不是很明白你的问题,我的英语不太好,但也许下面这个内容可以帮到你。在你的初始 Cargo.toml 文件中添加以下代码 [dependencies.foo] path = "./proj/src/bin" - Angel Angel
@AngelAngel 感谢您的建议,但 foo 不是像 lib 一样需要编译的依赖项,而是一个具有自己编译步骤的独立 Rust 程序。 - nathansizemore
1个回答

3
我的第一个想法是编写一个build.rs文件,通过自己的cargo命令来执行操作,但我找不到一个可传递要用作根目录的目录的标志。虽然有一个命令行参数,但它并不期望是一个目录;相反,它希望是`Cargo.toml`文件的完整路径。该参数被称为`--manifest-path`,它在许多子命令中都可以使用,例如`build`和`run`。它的使用方式如下(请注意,相对路径也是有效的):
$ cargo build --manifest-path=/path/to/proj/src/bin/foo-bin-rs/Cargo.toml

如果你需要在构建脚本中运行可执行文件,你可以像往常一样使用cargo run来进行构建和运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接