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 개발이 가능한 것 같다.