如何使用Cargo构建多个二进制文件?

时间:2016-04-13 16:10:02

标签: rust rust-cargo

我想创建一个带有public static int[] getArray(int size){ int[] array = new int[size]; Random random = new Random(); for (int i = 0; i < size; i++){ array[i] = random.nextInt(); } return array; } public static void kryoWriteArray(int[] array) throws FileNotFoundException { Kryo kryo = new Kryo(); Output output = new Output(new FileOutputStream("array.txt")); output.writeInts(array); output.close(); } daemon的项目,通过unix套接字连接。

clientclient需要两个二进制文件,那么如何告诉daemon从两个不同的来源构建两个目标?

为了增加一点幻想,我想为Cargo的主要部分添加一个library,并且只需要一个二进制文件来包裹它并通过套接字进行通信。

所以,我们有这种树架构:

daemon

我可以制作一个管理这两个问题的可执行文件,但这不是我想要做的,除非它是非常好的做法。

3 个答案:

答案 0 :(得分:65)

您可以使用[[bin]]指定多个二进制文件,如上所述here

[[bin]]
name = "daemon"
path = "src/daemon/bin/main.rs"

[[bin]]
name = "client"
path = "src/client/bin/main.rs"

提示:如果您将这些文件放在src/bin/daemon.rssrc/bin/client.rs中,您将获得两个名为daemonclient的可执行文件,因为Cargo会编译src/bin中的所有文件1}}自动生成具有相同名称的可执行文件。只有在不遵循此约定的情况下,才需要在上面的代码段中指定名称和路径。

答案 1 :(得分:4)

另一种方法是使用here中提到的工作区功能。由于我们可以拥有多个库,因此这将提供更大的灵活性。项目结构示例:

.
├── Cargo.toml
├── cli
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── core
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── daemon
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── gui
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── rpc
    ├── Cargo.toml
    └── src
        └── lib.rs

Cargo.toml的内容:

[workspace]
members = ["cli", "core", "daemon", "gui", "rpc"]

答案 2 :(得分:0)

如果您有一个庞大的项目,另一种格式可能是复制Crates.io source code所做的事情,例如:

src中的主库,带有一个包含可执行文件的Bin文件夹。 然后从可执行文件中调用主库箱。

这样,您的库就可以集中化,以便在缓存时更容易查找内容。

相关问题