여러 패키지를 모아 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