#cargo #platform #os #cpu

target-spec

Evaluate Cargo.toml target specifications

42 releases (stable)

Uses new Rust 2024

3.5.4 Oct 13, 2025
3.5.2 Sep 29, 2025
3.5.0 Jul 11, 2025
3.4.2 Feb 21, 2025
0.1.0 Mar 21, 2020

#422 in Parser implementations

Download history 77101/week @ 2025-09-14 76248/week @ 2025-09-21 78139/week @ 2025-09-28 100226/week @ 2025-10-05 101924/week @ 2025-10-12 107778/week @ 2025-10-19 115759/week @ 2025-10-26 110605/week @ 2025-11-02 112489/week @ 2025-11-09 124022/week @ 2025-11-16 124593/week @ 2025-11-23 151759/week @ 2025-11-30 140336/week @ 2025-12-07

549,118 downloads per month
Used in 81 crates (8 directly)

MIT/Apache

105KB
2K SLoC

target-spec

target-spec on crates.io Documentation (latest release) Documentation (main) Changelog License License

Evaluate Cargo.toml target specifications against platform triples.

Cargo supports platform-specific dependencies. These dependencies can be specified in one of two ways:

# 1. As Rust-like `#[cfg]` syntax.
[target.'cfg(all(unix, target_arch = "x86_64"))'.dependencies]
native = { path = "native/x86_64" }

# 2. Listing out the full target triple.
[target.x86_64-pc-windows-gnu.dependencies]
winhttp = "0.4.0"

target-spec provides the eval API which can be used to figure out whether such a dependency will be included on a particular platform.

use target_spec::eval;

// Evaluate Rust-like `#[cfg]` syntax.
let cfg_target = "cfg(all(unix, target_arch = \"x86_64\"))";
assert_eq!(eval(cfg_target, "x86_64-unknown-linux-gnu").unwrap(), Some(true));
assert_eq!(eval(cfg_target, "i686-unknown-linux-gnu").unwrap(), Some(false));
assert_eq!(eval(cfg_target, "x86_64-pc-windows-msvc").unwrap(), Some(false));

// Evaluate a full target-triple.
assert_eq!(eval("x86_64-unknown-linux-gnu", "x86_64-unknown-linux-gnu").unwrap(), Some(true));
assert_eq!(eval("x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc").unwrap(), Some(false));

For more advanced usage, see Platform and TargetSpec.

Optional features

  • custom: Adds support for custom targets via Platform::new_custom.
  • summaries: Adds the summaries module to enable serialization of Platform and TargetFeatures.
  • proptest1: Enables support for property-based testing of Platform and TargetFeatures using proptest.

Minimum supported Rust version

The minimum supported Rust version (MSRV) is Rust 1.82. The MSRV history is:

  • For target-spec 3.0.x: Rust 1.66.
  • For target-spec 3.1.x: Rust 1.73.
  • For target-spec 3.2.x: Rust 1.75.
  • For target-spec 3.3.x and 3.4.x: Rust 1.82.
  • For target-spec 3.5.x: Rust 1.86.

Within the 3.x series, MSRV bumps will be accompanied by a minor version update. The last 6 months of stable Rust releases will be supported.

To pretty-print target-spec errors, consider using the miette diagnostic library with target-spec-miette.

Contributing

See the CONTRIBUTING file for how to help out.

License

This project is available under the terms of either the Apache 2.0 license or the MIT license.

Dependencies

~0.4–1.1MB
~24K SLoC