작업공간 경계

작업공간은 빌드 결과를 공유하지만 의존성 사용 권한은 공유하지 않는다

최상위 `Cargo.toml`은 멤버를 묶고, `Cargo.lock`과 `target`은 하나로 모인다. 그러나 각 크레이트가 외부 패키지를 쓰려면 자기 manifest에 의존성을 적어야 한다.

최상위에서 공유되는 항목

[workspace] members

`adder`, `add_one`, `add_two` 같은 멤버 경로를 한곳에 모은다.

Cargo.lock

작업공간 전체가 같은 외부 크레이트 버전으로 해석되도록 고정한다.

target

컴파일 산출물을 최상위 디렉터리에 모아 불필요한 재빌드를 줄인다.

패키지마다 명시하는 항목

add_one = { path = "../add_one" }

`adder`가 `add_one`을 쓰려면 경로 의존성을 직접 선언해야 한다.

rand = "0.8.5"

`add_one`만 선언했다면 `adder`에서는 `use rand;`가 실패한다.

cargo test -p add_one

전체 테스트와 특정 패키지 테스트를 필요에 따라 나누어 실행한다.

바이너리

`adder`

`cargo run -p adder`로 실행하며 라이브러리 크레이트를 조합한다.

라이브러리

`add_one`

`add_one` 함수와 테스트를 담고, 필요하면 `rand` 의존성을 가진다.

배포

각 크레이트 별도 처리

crates.io에 올릴 때는 작업공간 전체가 아니라 패키지 단위로 배포한다.