seamus
seamus

Reputation: 2901

Why does `cargo new` create a binary instead of a library?

I am creating a library with Rust. On library creation I type

cargo new name

According to the docs this should create a lib, because --bin is omitted. However, the file is auto set to a binary.

Is there a setting I have to adjust to disable auto setting all projects to binary?

Upvotes: 26

Views: 13625

Answers (2)

Stargateur
Stargateur

Reputation: 26765

Cargo features

Cargo’s CLI has one really important change this release: cargo new will now default to generating a binary, rather than a library. We try to keep Cargo’s CLI quite stable, but this change is important, and is unlikely to cause breakage.

For some background, cargo new accepts two flags: --lib, for creating libraries, and --bin, for creating binaries, or executables. If you don’t pass one of these flags, in previous versions of Cargo, it would default to --lib. We made this decision because each binary (often) depends on many libraries, and so the library case is more common. However, this is incorrect; each library is depended upon by many binaries. Furthermore, when getting started, what you often want is a program you can run and play around with. It’s not just new Rustaceans though; even very long-time community members have said that they find this default surprising. As such, we’re changing it.

Source

Upvotes: 41

Tim Diekmann
Tim Diekmann

Reputation: 8486

Since Cargo 1.25 cargo new defaults to creating a binary crate, instead of a library crate.

cargo new accepts two flags: --lib, for creating libraries, and --bin, for creating binaries, or executables.

See the Changelog for 1.25.

Upvotes: 6

Related Questions