Compilação Condicional com o Atributo cfg do Rust

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, você aprenderá sobre o atributo cfg e a macro cfg! em Rust, que permitem verificações condicionais em configuração e avaliação, respectivamente. O atributo cfg permite compilação condicional, enquanto a macro cfg! avalia para verdadeiro ou falso em tempo de execução. Os blocos de código que utilizam cfg! devem ser válidos, independentemente do resultado da avaliação, ao contrário de #[cfg], que pode remover código.

Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo que desejar. Por exemplo, você pode usar main.rs, compilar e executar com rustc main.rs && ./main.

cfg

Verificações condicionais de configuração são possíveis por meio de dois operadores diferentes:

  • o atributo cfg: #[cfg(...)] em posição de atributo
  • a macro cfg!: cfg!(...) em expressões booleanas

Enquanto o primeiro permite compilação condicional, o segundo avalia condicionalmente para literais true ou false, permitindo verificações em tempo de execução. Ambos utilizam sintaxe de argumento idêntica.

cfg!, ao contrário de #[cfg], não remove nenhum código e apenas avalia para verdadeiro ou falso. Por exemplo, todos os blocos em uma expressão if/else precisam ser válidos quando cfg! é usado para a condição, independentemente do que cfg! esteja avaliando.

// Esta função só é compilada se o sistema operacional de destino for linux
#[cfg(target_os = "linux")]
fn are_you_on_linux() {
    println!("Você está rodando linux!");
}

// E esta função só é compilada se o sistema operacional de destino *não* for linux
#[cfg(not(target_os = "linux"))]
fn are_you_on_linux() {
    println!("Você *não* está rodando linux!");
}

fn main() {
    are_you_on_linux();

    println!("Tem certeza?");
    if cfg!(target_os = "linux") {
        println!("Sim. É definitivamente linux!");
    } else {
        println!("Sim. É definitivamente *não* linux!");
    }
}

Resumo

Parabéns! Você concluiu o laboratório Cfg. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.