September 20, 2017

Hello, Cargo!

Cargo に触れた時のメモです。

Cargo の役割

はじめる によると Cargo は

  1. コードのビルド
  2. コードが依存するライブラリのダウンロード
  3. それらのライブラリのビルド

を担うそうです。

パスを通す

.zshrc に source $HOME/.cargo/env など書きます。 その後、 source ~/.zshrc などすると cargo コマンドが使えるようになります。

$ cargo --version
cargo 0.21.0 (5b4b8b2ae 2017-08-12)

cargo new

$ cargo new rust_hello_cargo --bin
     Created binary (application) `rust_hello_cargo` project

rust_hello_cargo というディレクトリができて、適当にファイルが作られています。

$ cd rust_hello_cargo
$ ls
Cargo.toml src

Cargo.toml は以下のような内容になっています。

[package]
name = "rust_hello_cargo"
version = "0.1.0"
authors = ["kyokutyo <kyokutyo@gmail.com>"]

[dependencies]

main.rs を編集、 cargo run する

main.rssrc ディレクトリ内にあります。適当にテキストを変えます。

// main.rs
fn main() {
    println!("Hello, Cargo!");
}
$ cargo run
   Compiling rust_hello_cargo v0.1.0 (file:///Users/kyokutyo/path/to/rust_hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 1.45 secs
     Running `target/debug/rust_hello_cargo`
Hello, Cargo!
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
     Running `target/debug/rust_hello_cargo`
Hello, Cargo!

cargo run は src に変更があればビルド&実行、変更がなければ実行のみ行うそうです。

リリースビルドしてみる

$ cargo build --release
   Compiling rust_hello_cargo v0.1.0 (file:///Users/kyokutyo/path/to/rust_hello_cargo)
    Finished release [optimized] target(s) in 0.23 secs

targetrelease というディレクトリができています。

$ ./target/release/rust_hello_cargo
Hello, Cargo!

リリースビルドでは最適化されたバイナリが作られるそうですが、 Hello, Cargo! の出力だけなのであれです。

© kyokutyo 2017