๋๋ถ๋ถ์ ๊ธฐ๋ฅ ์ข ์์ฑ ๋์์ ํ์ฌ ์ข ์์ฑ์ ์ ํ ์ฌํญ์ผ๋ก ๋ง๋ค์ง๋ง ๊ธฐ๋ฅ์ด ์ด์ ์ข ์๋๋๋ก ํ์ฌ ๋ชจ๋ธ๋งํ ์ ์์ต๋๋ค.
"feature-a"์ "feature-b"๊ฐ ๋์ผํ ํฌ๋ ์ดํธ์ ์์กดํ์ง๋ง ๋ฒ์ ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ (๋ด๊ฐ ๋ณด๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด) ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ ํฌ๋ ์ดํธ๋ ํ ๋ฒ๋ง ์ง์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ด ๊ฒฝ์ฐ์ ์ผ๊ด๋๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค(๋ํ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฅ ์ข ์ ์ข ์์ฑ์ ์ง์ ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์์).
[target.'cfg(feature = "feature-a")'.dependencies]
foobar = "0.1"
[target.'cfg(feature = "feature-b")'.dependencies]
foobar = "0.2"
https://github.com/rust-lang/cargo/issues/5653? ์์๋ ์ด๊ฒ์ด ํฌ๊ฒ ์ง์๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ข ๋ ์ฝ๊ฒ ์ง์ ํ ์ ์์ต๋๋ค!
@alexcrichton ํน์ ๊ธฐ๋ฅ์๋ง ๊ด๋ จ๋ ์ข ์์ฑ์ด ์์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ํํํ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
ํธ์งํ๋ค:
๋ฌธ์์ ์ด๋ฏธ ์์ ๊ฐ ์์ต๋๋ค.
https://doc.rust-lang.org/cargo/reference/manifest.html#the -features-section
์์ ๊ณต๊ฐ์ด ์ฌ๋ฌ ํ์ ํฌ๋ ์ดํธ๋ก ๋ถํ ๋๊ณ ๊ฐ๊ฐ์ด ๊ธฐ๋ณธ ํฌ๋ ์ดํธ ์ข ์์ฑ์ ๊ณต์ ๊ธฐ๋ฅ์ ์ง์ ํ๋ ๋ฐ ์์กดํ๋ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ ํ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
[features]
default = [ "fwupd", "system76" ]
fwupd = []
system76 = []
[target.'cfg(all(not(feature = "fwupd"), feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "system76" ] }
[target.'cfg(all(feature = "fwupd", not(feature = "system76")))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd" ] }
[target.'cfg(all(feature = "fwupd", feature = "system76"))'.dependencies]
firmware-manager = { path = "../", default-features = false, features = [ "fwupd", "system76" ] }
cargo build --manifest-path gtk/Cargo.toml --no-default-features --features system76
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์์ ๊ณต๊ฐ์ด ์ฌ๋ฌ ํ์ ํฌ๋ ์ดํธ๋ก ๋ถํ ๋๊ณ ๊ฐ๊ฐ์ด ๊ธฐ๋ณธ ํฌ๋ ์ดํธ ์ข ์์ฑ์ ๊ณต์ ๊ธฐ๋ฅ์ ์ง์ ํ๋ ๋ฐ ์์กดํ๋ ์ ์ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์ ํ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.