RUST编程

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

2020-05-09  本文已影响0人  令狐壹冲

说明

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

介绍

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

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

示例一

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

[package]
...
build = "build.rs
.
├── Cargo.toml
├── build.rs
└── src
    └── main.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();
}
include!(concat!(env!("OUT_DIR"), "/hello.rs"));

fn main() {
    println!("{}", message());
}
Hello, world!

示例二

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

[package]
# ---snip---
build = "build.rs

# ---snip---

[build-dependencies]
cc = "1.0
extern crate cc;

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

#include <stdio.h>

void hello() {
    printf("Hello, World!\n");
}
extern { fn hello(); }

fn main() {
    unsafe { hello(); }
}
Hello, World!
上一篇 下一篇

猜你喜欢

热点阅读