Rust, Workspace

Jeonghak Cho·2025년 1월 1일

Rust

목록 보기
5/13

Workpace

여러 패키지를 모아 workspace로 구성할 수 있다.

vagrant@master:~/samples$ cargo new myworkspace
    Creating binary (application) `myworkspace` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
vagrant@master:~/samples$ cd myworkspace
vagrant@master:~/samples/myworkspace$ vi Cargo.toml

[package]
name = "myworkspace"
version = "0.1.0"
edition = "2021"
[workspace]
members = ["myapp"]
[dependencies]

vagrant@master:~/samples/myworkspace$ cargo new myapp
    Creating binary (application) `myapp` package
note: see more `Cargo.toml` keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
vagrant@master:~/samples/myworkspace$ tree
.
├── Cargo.toml
├── myapp
│   ├── Cargo.toml
│   └── src
│       └── main.rs
└── src
    └── main.rs

3 directories, 4 files

워크스페이스에서 build를 할 경우 하위 멤버 패키지의 build는 하지 않는다.

vagrant@master:~/samples/myworkspace$ cargo build
   Compiling mylib v0.1.0 (/home/vagrant/samples/myworkspace/mylib)
   Compiling myworkspace v0.1.0 (/home/vagrant/samples/myworkspace)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.19s
vagrant@master:~/samples/myworkspace$ tree
.
├── Cargo.lock
├── Cargo.toml
├── myapp
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── mylib
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
        │   ├── libmylib-4d5727011d0e7f10.rlib
        │   ├── libmylib-4d5727011d0e7f10.rmeta
        │   ├── mylib-4d5727011d0e7f10.d
        │   ├── myworkspace-73f5413839e51df7
        │   └── myworkspace-73f5413839e51df7.d
        ├── examples
        ├── incremental
        │   ├── mylib-3dw2uqa8of008
        │   │   ├── s-h39e7fnrpo-0ygd0xj-8ys42f39bref8gwyh12n02a5u
        │   │   │   ├── 25eos9tm2j4q867yewivnze4x.o
        │   │   │   ├── dep-graph.bin
        │   │   │   ├── query-cache.bin
        │   │   │   └── work-products.bin
        │   │   └── s-h39e7fnrpo-0ygd0xj.lock
        │   └── myworkspace-00j6cxeyp0xx6
        │       ├── s-h39e7fogrt-1e7j1v9-6zsf6hfhyobzlxaj85ygvifmm
        │       │   ├── 2wy9j9d4jp9grnskl49f1jagw.o
        │       │   ├── 72x9mwqb9jx4on554sz8uivoc.o
        │       │   ├── 9hbouuudezwr6egcim1lv94cw.o
        │       │   ├── akls0obbkm4kiyx1fj8ctwbvb.o
        │       │   ├── aw67lznhblaebmbl7inhfpvov.o
        │       │   ├── dep-graph.bin
        │       │   ├── dijqfp3d4te0afxjli4fsi6ge.o
        │       │   ├── query-cache.bin
        │       │   └── work-products.bin
        │       └── s-h39e7fogrt-1e7j1v9.lock
        ├── myworkspace
        └── myworkspace.d

15 directories, 30 files

멤버 패키지에서 build를 하면 멤버 패키지 내의 target 폴더에서 결과물이 생기지 않는다.

vagrant@master:~/samples/myworkspace/myapp$ cargo build
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
vagrant@master:~/samples/myworkspace/myapp$ tree
.
├── Cargo.toml
└── src
    └── main.rs

1 directory, 2 files

상단 워크스페이스에서 빌드된 결과물 확인이 가능하다.

vagrant@master:~/samples/myworkspace/myapp$ cd ..
vagrant@master:~/samples/myworkspace$ tree
.
├── Cargo.lock
├── Cargo.toml
├── myapp
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── mylib
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
... (생략)
        ├── libmylib.d
        ├── libmylib.rlib
        ├── myapp
        ├── myapp.d
        ├── myworkspace
        └── myworkspace.d

19 directories, 58 files

mylib의 경우도 동일하다.

vagrant@master:~/samples/myworkspace$ cd mylib
vagrant@master:~/samples/myworkspace/mylib$ cargo build
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
vagrant@master:~/samples/myworkspace/mylib$ tree
.
├── Cargo.toml
└── src
    └── lib.rs

1 directory, 2 files

상단 워크스페이스로 가서 mylib 빌드 결과를 확인한다.

vagrant@master:~/samples/myworkspace/mylib$ cd ..
vagrant@master:~/samples/myworkspace$ tree
.
├── Cargo.lock
├── Cargo.toml
├── myapp
│   ├── Cargo.toml
│   └── src
│       └── main.rs
├── mylib
│   ├── Cargo.toml
│   └── src
│       └── lib.rs
├── src
│   └── main.rs
└── target
    ├── CACHEDIR.TAG
    └── debug
        ├── build
        ├── deps
...(생략)
        ├── libmylib.d
        ├── libmylib.rlib
        ├── myworkspace
        └── myworkspace.d

0개의 댓글