2016-06-13 38 views
3

我的鏽項目有實例只與某些功能如何根據功能禁用整個示例?

我可以忽略與主要功能:

依賴於功能造成的錯誤,當我運行 cargo test
#[cfg(feature = "foo")] 
fn main() { 

但其它語句。所以我必須在函數和使用語句中使用一些cfg屬性語句來禁用依賴於該功能的代碼。

有沒有辦法根據功能配置忽略整個示例文件?

同時,由於主沒有功能被隱藏,cargo test有此錯誤:

error: main function not found

因此,這不是一個很好的解決方案。

+1

不知道,所以沒有回答,而是'#什麼[ cfg(feature =「foo」)]'在你文件的頂部?這指的是模塊/箱子。 –

+0

不起作用,因爲該示例不是一個模塊。如果我把它放在最上面,它只是禁用了第一個語句,它是* extern crate *,導致缺少條目錯誤。 – Arlo

+0

所以你可以把所有的代碼包裝在一個模塊中,*在main中使用mymodule :: \ **,但是你需要* pub在模塊中使用*任何使用語句,並將pub添加到main使用的每個函數中。所以這是更多的設置來實現這一點。 – Arlo

回答

1

做出更具體的使用#[cfg]指令,同時提供一個main()foo被啓用,並且main()foo不是!

extern crate blah; 
// other code which will still compile even without "foo" feature 

#[cfg(feature = "foo")] 
fn main() { 
    use blah::OnlyExistsWithFoo; 
    // code which requires "foo" feature 
} 

#[cfg(not(feature = "foo"))] 
fn main() { 
    // empty main function for when "foo" is disabled 
}