W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Rust 有一個(gè)特殊屬性 #[cfg],它允許你編譯基于標(biāo)志的代碼并傳遞給編譯器。它有兩種形式:
#[cfg(foo)]
#[cfg(bar = "baz")]
他們也有一些幫助:
#[cfg(any(unix, windows))]
#[cfg(all(unix, target_pointer_width = "32"))]
#[cfg(not(foo))]
這些可以隨意嵌套:
#[cfg(any(not(unix), all(target_os="macos", target_arch = "powerpc")))]
至于如何啟用或禁用這些開(kāi)關(guān),如果你使用 Cargo,可以在 Cargo.toml 的 [features] 部分 加以設(shè)置:
[features]
# no features by default
default = []
# The “secure-password” feature depends on the bcrypt package.
secure-password = ["bcrypt"]
當(dāng)你這樣做時(shí),Cargo 傳遞一個(gè)標(biāo)識(shí)給 rustc:
--cfg feature="${feature_name}"
這些 cfg 標(biāo)識(shí)的總和將決定哪些得到激活,從而致使哪些代碼被編譯。讓我們看看這段代碼:
#[cfg(feature = "foo")]
mod foo {
}
如果我們使用 cargo build --features "foo" 編譯代碼,它將發(fā)送 --cfg feature="foo" 標(biāo)識(shí)給 rustc,且輸出中包含 mod foo。如果我們定期地使用 cargo build 編譯它,也不傳遞額外的標(biāo)識(shí),就不會(huì)存在任何 foo 模塊。
你也可以使用 cfg_attr 設(shè)置另一個(gè)基于 cfg 變量的屬性:
#[cfg_attr(a, b)]
如果 a 使用 cfg 屬性設(shè)定,和使用 #[b] 是相同的。
cfg! 語(yǔ)法擴(kuò)展允許你在你代碼中的任何位置使用這些類(lèi)型標(biāo)記:
if cfg!(target_os = "macos") || cfg!(target_os = "ios") {
println!("Think Different!");
}
根據(jù)配置設(shè)置不同,這些在編譯時(shí)取真或假。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: