Rust 如何使用Cargo构建一个既作为rlib又作为动态库但内容不同的库?
我想制作一个包含以下内容的项目:Rust 如何使用Cargo构建一个既作为rlib又作为动态库但内容不同的库?,rust,rust-cargo,Rust,Rust Cargo,我想制作一个包含以下内容的项目: 图书馆 C语言的绑定 使用库的可执行文件 目录结构,不包括临时文件和其他垃圾: 。 ├── 货舱 ├── src │ ├── c_bindings.rs//包含库的c绑定 │ ├── 压缩比 │ ├── const_data.rs │ ├── 哈什卢比 │ ├── lib.rs//library │ └── main.rs//使用库的简单可执行文件 └── 目标 └── 调试 ├── 古斯特·斯特里博格 ├── libgost_str
- 图书馆
- C语言的绑定
- 使用库的可执行文件
。
├── 货舱
├── src
│ ├── c_bindings.rs//包含库的c绑定
│ ├── 压缩比
│ ├── const_data.rs
│ ├── 哈什卢比
│ ├── lib.rs//library
│ └── main.rs//使用库的简单可执行文件
└── 目标
└── 调试
├── 古斯特·斯特里博格
├── libgost_stribog.rlib
我想要货物构建
执行以下操作:
- 构建将忽略
c_绑定.rs
- 将使用
C_bindings.rs
- 可执行
└── 目标
└── 调试
├── 古斯特·斯特里博格
├── libgost_stribog.rlib
├── 利布戈斯特·斯特里博格·索
我的
Cargo.toml
应该是什么样子?自以为是的回答:不要
相反,将代码拆分为两个或三个单独的板条箱:
c_bindings.rs
移动到绑定板条箱中,就像lib.rs
一样。它可以依赖于核心库。您还可以将main.rs
移动到另一个板条箱中,该板条箱也取决于核心库
这三个板条箱可以位于同一个源代码存储库中,但将通过单独的调用构建
可能被证明是有用的;事实上,它被列为一个明确的原因(“一个带有用于FFI绑定的子板条箱的FFI板条箱”)。@flownee RFC声明“工作空间最终可以通过--all
标志进行扩展,因此在工作空间根目录中,您可以执行货物构建--all
来编译所有板条箱”。但是,在完成之前,您需要切换到每个板条箱的目录并运行货物构建
。一个小小的Makefile
或shell脚本可能有助于缩小差距,直到--all
实现为止。