Is there a way to include a crate in Cargo.toml but have that compiled conditionally based on the target OS. Say I have a crate xyz but I want to compile it only on Linux and not on Mac for instance. Can this be done? Any pointers? I know how to do this for specific functions.
Add #![cfg(target_os = "linux")]
to your crate root. The crate will compile on non-linux targets, but nothing in the crate will be compiled.
Yes. This is what I did:
[target.'cfg(linux)'.dependencies]
xyz = "1.0"
abc = "1.0"
However if I have any crate below it that doesn't get picked either. So should this be the very last item in the toml file? For instance "abc" doesn't get compiled.
That's just how TOML works. Each [...]
thing starts a new section, and any lines after it will be added to that section.
So if you want abc
to be added to the general [dependencies]
section, you might do something like this:
[package]
name = "my-crate"
[dependencies]
abc = "1.0"
[target.'cfg(linux)'.dependencies]
xyz = "1.0"
[dev-dependencies]
pretty-assertions = "1"