Rustコンパイル / プログラム実行

# Rustのコンパイル/プログラム実行
公式サイトを参考にして、コンパイル/プログラム実行の手順をまとめている。

https://doc.rust-jp.rs/book-ja/ch01-00-getting-started.html


### 簡単なRustのコードを作成する
下記HelloWorldのコードを作成する。（main.rs）

```rust
// Hello World

fn main(){
    println!("Hello World!")
}
```

### rustcコマンドにてコードをコンパイルする

rustcコマンドを使用して、main.rsファイルをコンパイルする。

```bash
rustc main.rs
```

実行後、mainファイルが存在することを確認する。

```bash
drwxrwxr-x 2 vscode vscode    4096 Oct 24 12:31 .devcontainer
drwxr-xr-x 8 vscode vscode    4096 Oct 24 12:39 .git
-rwxr-xr-x 1 vscode vscode 4655232 Oct 24 12:44 main
-rw-r--r-- 1 vscode vscode      57 Oct 24 12:43 main.rs
```

### Rustのプログラムを実行する

下記コマンドを実行することでプログラムを実行する。

```bash
./main
```

下記HelloWorldが表示されることを確認する。

```bash
vscode ➜ /workspaces/rust_devcontainer (master) $ ./main

Hello World!
```

## Rustのビルドシステム兼パッケージマネージャー（cargo）を使用してプログラムを実行する

### プロジェクトを作成する

下記コマンドを実行して、プロジェクトを作成する。

```bash
cargo new hello_cargo
```

プロジェクトが作成されていることを確認する。（hello_cargo）

```bash
vscode ➜ /workspaces/rust_devcontainer (master) $ cargo new hello_cargocargo new hello_cargo
     Created binary (application) `HelloCargo` package
vscode ➜ /workspaces/rust_devcontainer (master) $ 
vscode ➜ /workspaces/rust_devcontainer (master) $ ls -la 
total 4572
drwxrwxr-x 5 vscode vscode    4096 Oct 24 12:46 .
drwxr-xr-x 3 root   root      4096 Oct 24 12:37 ..
drwxrwxr-x 2 vscode vscode    4096 Oct 24 12:31 .devcontainer
drwxr-xr-x 8 vscode vscode    4096 Oct 24 12:39 .git
drwxr-xr-x 3 vscode vscode    4096 Oct 24 12:46 hello_cargo
-rwxr-xr-x 1 vscode vscode 4655232 Oct 24 12:44 main
-rw-r--r-- 1 vscode vscode      57 Oct 24 12:43 main.rs
```

ディレクトリおよびmain.rsのコードを確認する

下記ディレクトリにて作成されていることを確認する。

```bash
vscode ➜ /workspaces/rust_devcontainer (master) $ ls -la hello_cargo/src/
total 12
drwxr-xr-x 2 vscode vscode 4096 Oct 24 12:46 .
drwxr-xr-x 3 vscode vscode 4096 Oct 24 12:46 ..
-rw-r--r-- 1 vscode vscode   45 Oct 24 12:46 main.rs
```

作成初期の場合、main.rsにHelloWorldのコードが記載されているため確認する。

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

### プロジェクトをビルドする

hello_cargoディレクトリ配下にて、下記コマンドを実行してビルドする。

```bash
cargo build
```

下記の通りビルドされる

```bash
vscode ➜ /workspaces/rust_devcontainer/hello_cargo (master) $ cargo build
   Compiling hello_cargo v0.1.0 (/workspaces/rust_devcontainer/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
vscode ➜ /workspaces/rust_devcontainer/hello_cargo (master) $
```

### プロジェクトをビルドして、エラーがないか確認する（バイナリデータは生成しない）

hello_cargoディレクトリ配下にて、下記コマンドを実行してコードをチェックする。

```bash
cargo check
```

下記の通りチェックされる

```bash
vscode ➜ /workspaces/rust_devcontainer/hello_cargo (master) $ cargo check
    Checking hello_cargo v0.1.0 (/workspaces/rust_devcontainer/hello_cargo)
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
```

### プログラムをビルドして、実行する

HelloCargoディレクトリ配下にて、下記コマンドを実行してプログラムを実行する。（ビルドと実行）

‘Hello, world!’が表示される。

```bash
cargo run
```

下記の通りビルド後、実行される

```bash
vscode ➜ /workspaces/rust_devcontainer/hello_cargo (master) $ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.00s
     Running `target/debug/hello_cargo`
Hello, world!
```

### 参考：cargo詳細

- `cargo new`を使ってプロジェクトを作成できる
- `cargo build`を使ってプロジェクトをビルドできる
- `cargo run`を使うとプロジェクトのビルドと実行を1ステップで行える
- `cargo check`を使うとバイナリを生成せずにプロジェクトをビルドして、エラーがないか確認できる
- Cargoは、ビルドの成果物をコードと同じディレクトリに保存するのではなく、***target/debug***ディレクトリに格納する

以上がコンパイル / プログラム実行の手順になる。