Cargo: ๊ธฐ๋Šฅ๋ณ„ ์ข…์†์„ฑ ์ง€์ • ํ—ˆ์šฉ

์— ๋งŒ๋“  2018๋…„ 08์›” 31์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/cargo

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ ์ข…์†์„ฑ ๋Œ€์‘์€ ํ˜„์žฌ ์ข…์†์„ฑ์„ ์„ ํƒ ์‚ฌํ•ญ์œผ๋กœ ๋งŒ๋“ค์ง€๋งŒ ๊ธฐ๋Šฅ์ด ์ด์— ์ข…์†๋˜๋„๋ก ํ•˜์—ฌ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"feature-a"์™€ "feature-b"๊ฐ€ ๋™์ผํ•œ ํฌ๋ ˆ์ดํŠธ์— ์˜์กดํ•˜์ง€๋งŒ ๋ฒ„์ „์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” (๋‚ด๊ฐ€ ๋ณด๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด) ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํฌ๋ ˆ์ดํŠธ๋Š” ํ•œ ๋ฒˆ๋งŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์€ ์ด ๊ฒฝ์šฐ์— ์ผ๊ด€๋˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋˜ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋Šฅ ์ข…์† ์ข…์†์„ฑ์„ ์ง€์ •ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Œ).

[target.'cfg(feature = "feature-a")'.dependencies]
foobar = "0.1"

[target.'cfg(feature = "feature-b")'.dependencies]
foobar = "0.2"
A-features A-optional-dependencies

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ž‘์—… ๊ณต๊ฐ„์ด ์—ฌ๋Ÿฌ ํ•˜์œ„ ํฌ๋ ˆ์ดํŠธ๋กœ ๋ถ„ํ• ๋˜๊ณ  ๊ฐ๊ฐ์ด ๊ธฐ๋ณธ ํฌ๋ ˆ์ดํŠธ ์ข…์†์„ฑ์˜ ๊ณต์œ  ๊ธฐ๋Šฅ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์˜์กดํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์€ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

[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

๋ชจ๋“  3 ๋Œ“๊ธ€

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
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰