search
LoginSignup
13
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

Organization

Cargoについて学ぶ

Cargoとは

  • Rustのビルドシステムであり、パッケージマネージャです。
  • コードのビルドやコードが依存しているライブラリのダウンロードや、それらのライブラリのビルドを行ってくれます。

Cargoは、rustの公式のインストーラを使用していれば、勝手にインストールされます。

❯ cargo --version
cargo 1.48.0

cargoでプロジェクトを作成してみる

  • まずはじめに、hello_cargoという名前の新しいバイナリの実行可能ファイルを作成します。
  • cargo newに渡した--bin引数で、バイナリを作成します。
❯ cargo new hello_cargo --bin
     Created binary (application) `hello_cargo` package
  • hello_cargoディレクトリにいき、中を見てみると2つのファイルと1つのディレクトリを確認できます。
  • Cargo.tomlファイルと、中にmain.rsファイルがあるsrcディレクトリです。
  • また、 .gitignoreファイルと共に、新しいGitリポジトリも初期化されています。
❯ cd hello_cargo
❯ tree .
.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files
  • Cargo.tomlを見てみる。

[下記は、cargo newで生成されるもの]

  • Cargo.tomlはCargoの設定フォーマットです。
  • [package]は、後の文がパッケージを設定していることを示すセクションヘッダーです。
  • [package]の後に3行あるもの(name,version,authors)は、Cargoがプログラムをコンパイルするのに必要な設定情報です。

  • [dependencies]は、プロジェクトの依存を列挙するためのセクションを示しています。

Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["yo-koitabashi <XXXX@XXX.com>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

src/main.rsを変更し、ビルド実行してみる

  • Cargoは、ソースファイルがsrcディレクトリにあることを期待します。
  • 今回は、下記のコードでビルドしてみようと思います。
src/main.rs
fn main() {
    println!("Hello, world!");
}

ビルド

  • ビルドの実行は下記のコマンドを実行できます。

[cargo buildコマンドで作成されるもの]

  • カレントディレクトリではなく、target/debug/hello_cargoに実行可能ファイルを作成します。
  • 最上位に新しいファイルCargo.lockを作成します。このファイルは、自分のプロジェクトの依存の正確なバージョンを追いかけます。
❯ cargo build
   Compiling hello_cargo v0.1.0 (/Users/yoshitaka.koitabashi/Desktop/rust勉強用/rust-cargo1-3/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 5.41s
❯ ls -la
total 24
drwxr-xr-x   8 yoshitaka.koitabashi  staff  256  3  2 23:28 .
drwxr-xr-x   3 yoshitaka.koitabashi  staff   96  3  2 23:10 ..
drwxr-xr-x  10 yoshitaka.koitabashi  staff  320  3  2 23:28 .git
-rw-r--r--   1 yoshitaka.koitabashi  staff    8  3  2 23:10 .gitignore
-rw-r--r--   1 yoshitaka.koitabashi  staff  142  3  2 23:28 Cargo.lock
-rw-r--r--   1 yoshitaka.koitabashi  staff  233  3  2 23:10 Cargo.toml
drwxr-xr-x   3 yoshitaka.koitabashi  staff   96  3  2 23:10 src
drwxr-xr-x@  5 yoshitaka.koitabashi  staff  160  3  2 23:28 target
  • 下記のコマンドで実行可能ファイルを実行できます。
❯ ./target/debug/hello_cargo
Hello, world!

コードをコンパイルし実行する方法

  • cargo runコマンドを使用すると、コードをコンパイルし、吐かれた実行可能ファイルを1コマンドで実行することができます。
❯ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!

コンパイルできることを確かめる方法

  • cargo checkコマンドを使用すると、実行可能ファイルは生成せず、コードを確認しコンパイルできることを確かめます。
❯ cargo check
    Checking hello_cargo v0.1.0 (/Users/yoshitaka.koitabashi/Desktop/rust勉強用/rust-cargo1-3/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.06s

リリースビルドを行う方法

  • cargo build --releaseコマンドを使用すると、最適化を行なってコンパイルすることができます。
  • このコマンドは、target/debugではなく、 target/releaseに実行可能ファイルを作成します。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
13
Help us understand the problem. What are the problem?