美文网首页RUST编程
010 Rust网络编程,cargo构建脚本介绍

010 Rust网络编程,cargo构建脚本介绍

作者: 令狐壹冲 | 来源:发表于2020-05-09 21:00 被阅读0次

说明

此章节并不是只有Rust网络编程的内容,但是由于后续的例子有些依赖于此知识点,所以放在Rust网络编程系列中做简单介绍。参考资料主要是官方文档《Cargo之书》。

介绍

在实际的项目中,有些包需要编译第三方非Rust代码,例如 C库;有些包需要链接到 C库,当然这些库既可以位于系统上,
也可以从源代码构建。其它的需求则有可能是需要构建代码生成 。
在Cargo中,提供了构建脚本,来满足这些需求。

指定的build命令应执行的Rust文件,将在包编译其它内容之前,被编译和调用,从而具备Rust代码所依赖的构建或生成的组件。Build通常被用来:

  • 构建一个捆绑的C库;
  • 在主机系统上找到C库;
  • 生成Rust模块;
  • 为crate执行所需的某平台特定配置。

示例一

功能:生成代码(Rust模块)。

  • 修改Cargo.toml:
[package]
...
build = "build.rs
  • 在src同级目录下添加build.rs:
.
├── Cargo.toml
├── build.rs
└── src
    └── main.rs
  • 编写build.rs文件,如下:
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;

fn main() {
    let out_dir = env::var("OUT_DIR").unwrap();
    let dest_path = Path::new(&out_dir).join("hello.rs");
    let mut f = File::create(&dest_path).unwrap();

    f.write_all(b"
        pub fn message() -> &'static str {
            \"Hello, World!\"
        }
    ").unwrap();
}
  • 编写src/main.rs:
include!(concat!(env!("OUT_DIR"), "/hello.rs"));

fn main() {
    println!("{}", message());
}
  • 编译运行结果:
Hello, world!

示例二

功能:编译c代码,然后由Rust调用。

  • 修改Cargo.toml,添加如下:
[package]
# ---snip---
build = "build.rs

# ---snip---

[build-dependencies]
cc = "1.0
  • 添加build.rs,编写如下:
extern crate cc;

fn main() {
    cc::Build::new()
        .file("src/hello.c")
        .compile("hello");

  • 在src目录下添加hello.c,编写如下:
#include <stdio.h>

void hello() {
    printf("Hello, World!\n");
}
  • 编写src/main.rs如下:
extern { fn hello(); }

fn main() {
    unsafe { hello(); }
}
  • 编译执行:
    打印:
Hello, World!

相关文章

  • 010 Rust网络编程,cargo构建脚本介绍

    说明 此章节并不是只有Rust网络编程的内容,但是由于后续的例子有些依赖于此知识点,所以放在Rust网络编程系列中...

  • 使用Cargo

    使用Cargo创建项目 Cargo是rust的构建系统和包管理系统,使用Cargo可以帮助我们创建和管理项目,构建...

  • Rust 学习笔记 - 使用 Cargo

    Cargo 是 Rust 的构建系统和包管理工具,Cargo 负责三个工作:构建你的代码,下载你代码依赖的库并便利...

  • Rust 问答之 Cargo 是什么

    Cargo:Rust 的构建工具和包管理器 文章标题来自于 Rust 官网: 入门 - Rust 程序设计语言 在...

  • rust学习笔记

    Cargo:Rust 的构建工具和包管理器 您在安装 Rustup 时,也会安装 Rust 构建工具和包管理器的最...

  • Rust-Hello Cargo

    Cargo 是 Rust 的构建系统和包管理器。- 类似于Maven/Gradle (构建代码,下载依赖库,并编译...

  • rust语言和cargo介绍

    cargo Cargo 是Rust的 包经理。Cargo 会下载 Rust 的包依赖项,编译您的包,生成可分发的包...

  • Python orjson安装报错

    Cargo, the Rust package managerThis package requires Rust...

  • 使用topgrade命令更新所有软件

    安装rust和cargo包管理器 通过cargo安装topgrade 执行命令更新所有软件

  • 003Rust异步编程,Future trait介绍

    Future介绍 Future是Rust异步编程的核心,Rust异步编程基本都是围绕Future来展开。那么,什么...

网友评论

    本文标题:010 Rust网络编程,cargo构建脚本介绍

    本文链接:https://www.haomeiwen.com/subject/kjilnhtx.html