Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何使用Cargo构建一个既作为rlib又作为动态库但内容不同的库?_Rust_Rust Cargo - Fatal编程技术网

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绑定
  • (可选)可执行文件
  • 然后,将
    c_bindings.rs
    移动到绑定板条箱中,就像
    lib.rs
    一样。它可以依赖于核心库。您还可以将
    main.rs
    移动到另一个板条箱中,该板条箱也取决于核心库

    这三个板条箱可以位于同一个源代码存储库中,但将通过单独的调用构建

    可能被证明是有用的;事实上,它被列为一个明确的原因(“一个带有用于FFI绑定的子板条箱的FFI板条箱”)。

    @flownee RFC声明“工作空间最终可以通过
    --all
    标志进行扩展,因此在工作空间根目录中,您可以执行
    货物构建--all
    来编译所有板条箱”。但是,在完成之前,您需要切换到每个板条箱的目录并运行
    货物构建
    。一个小小的
    Makefile
    或shell脚本可能有助于缩小差距,直到
    --all
    实现为止。