Атрибут cfg
Атрибут cfg управляет условной компиляцией кода. Он проверяет заданное условие во время компиляции и включает код только в том случае, если условие истинно. Параметром атрибут принимает условие конфигурации, которое может содержать названия целевых платформ, архитектур, семейств операционных систем, а также пользовательские флаги, задаваемые через --cfg. Атрибут можно применять к функциям, модулям, структурам, перечислениям, константам, импортам и другим элементам языка.
Синтаксис
#[cfg(condition)]
item
Пример
Давайте включим функцию только для целевой платформы Linux:
#[cfg(target_os = "linux")]
fn platform_info()
{
println!("Running on Linux");
}
fn main()
{
platform_info();
}
Результат выполнения кода:
"Running on Linux"
Пример
Давайте используем атрибут cfg с отрицанием not, чтобы код выполнялся на всех платформах, кроме Windows:
#[cfg(not(target_os = "windows"))]
fn platform_info()
{
println!("Not Windows");
}
fn main()
{
platform_info();
}
Результат выполнения кода:
"Not Windows"
Пример
Давайте объединим несколько условий через all, чтобы код компилировался только при одновременном выполнении всех условий:
#[cfg(all(target_arch = "x86_64", target_os = "linux"))]
fn platform_info()
{
println!("x86_64 Linux");
}
fn main()
{
platform_info();
}
Результат выполнения кода:
"x86_64 Linux"
Пример
Давайте используем any, чтобы код компилировался при выполнении хотя бы одного из условий:
#[cfg(any(target_os = "linux", target_os = "macos"))]
fn platform_info()
{
println!("Unix-like system");
}
fn main()
{
platform_info();
}
Результат выполнения кода:
"Unix-like system"