Archive of https://github.com/rust-lang/cfg-if — A if/elif-like macro for Rust #[cfg] statements
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-16 17:37:37 +00:00
.github Bump actions/checkout from 6 to 7 2026-06-22 17:16:47 -04:00
src Rewrap text to match surrounding style 2026-09-16 17:37:37 +00:00
tests Disable the unexpected_cfgs lint when testing 2024-08-06 17:42:55 -05:00
.gitignore Initial commit 2015-07-07 18:07:04 -07:00
Cargo.toml Deprecation notice + crate version bump 2026-09-16 13:35:47 -04:00
CHANGELOG.md Add a changelog entry for the upcoming deprecation notice 2026-09-16 17:26:25 +00:00
LICENSE-APACHE Add missing license files 2017-02-21 06:43:06 -08:00
LICENSE-MIT Add missing license files 2017-02-21 06:43:06 -08:00
README.md Rewrap text to match surrounding style 2026-09-16 17:37:37 +00:00

cfg-if

Warning

This crate has been "replaced" by the cfg_select! macro, which is stable since Rust 1.95.0 with a slightly different syntax. Barring breakages and security fixes, this crate will no longer be updated.

Documentation

A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted.

[dependencies]
cfg-if = "1.0"

Example

cfg_if::cfg_if! {
    if #[cfg(unix)] {
        fn foo() { /* unix specific functionality */ }
    } else if #[cfg(target_pointer_width = "32")] {
        fn foo() { /* non-unix, 32-bit functionality */ }
    } else {
        fn foo() { /* fallback implementation */ }
    }
}

fn main() {
    foo();
}

The cfg_if! block above is expanded to:

#[cfg(unix)]
fn foo() { /* unix specific functionality */ }
#[cfg(all(target_pointer_width = "32", not(unix)))]
fn foo() { /* non-unix, 32-bit functionality */ }
#[cfg(not(any(unix, target_pointer_width = "32")))]
fn foo() { /* fallback implementation */ }

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in cfg-if by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.