rust 크레이트 features 사용하기

wangki·2025년 2월 1일
1

Rust

목록 보기
12/54

문제

Rust features를 통해서 크레이트 공개 모듈 정하기
windows 크레이트에서 CreateFile win32 api를 호출하기 위해서는 아래와 같은 features를 [dependencies]에 추가해줘야한다.

https://microsoft.github.io/windows-rs/features/

어떻게 features로 공개하는 모듈이 다른지 궁금해서 작성하게 되었다.

해결책

carto.toml파일에

[features]
default = ["cat"]
cat = []
dog = []

이런식으로 설정한다.
default로 features를 설정하지 않으면 cat이 설정된다.

lib.rs파일에

#[cfg(feature = "cat")]
pub mod cat {
    pub fn speak() {
        println!("미아유");
    }
}

#[cfg(feature = "dog")]
pub mod dog {
    pub fn speak() {
        println!("멍멍");
    }
}

이렇게 만들어놓은 my_crate를 다른 rust 크레이트에서 사용해보자

my_crate = { path = "d:/work/rust/my_crate"}

위와 같이 설정하면

    cat::speak();
    dog::speak();

이렇게 호출하면 컴파일 에러가 발생한다.
dog 모듈을 찾을 수 없다고 나온다.

my_crate = { path = "d:/work/rust/my_crate", features = ["dog"] }

features에 dog를 추가하게되면 dog 모듈도 정상적으로 사용할 수 있다.

결론

features 시스템을 잘 활용하면 프로젝트의 크기를 줄이고, 불필요한 종속성을 제거할 수 있어 효율적인 rust 개발이 가능한 것 같다.

0개의 댓글