cargo-hack
A tool to work around some limitations on cargo.
Cargo is a great tool but has some limitations. This tool provides additional flags to avoid some of these limitations.
Installation
To install the current cargo-hack requires Rust 1.36 or later.
Usage
cargo-hack
is basically wrapper of cargo
that propagates subcommand and most of the passed flags to cargo
, but provides additional flags and changes the behavior of some existing flags.
-
--each-feature
Perform for each feature which includes default features and
--no-default-features
of the package.This is useful to check that each feature is working properly. (When used for this purpose, it is recommended to use with
--no-dev-deps
to avoid cargo#4866.)This is a workaround for an issue that cargo does not support for
--features
and--no-default-features
flags for sub crates (cargo#3620, cargo#4106, cargo#4463, cargo#4753, cargo#5015, cargo#5364, cargo#6195). -
--feature-powerset
Perform for the feature powerset which includes
--no-default-features
and default features of the package.This is useful to check that every combination of features is working properly. (When used for this purpose, it is recommended to use with
--no-dev-deps
to avoid cargo#4866.) -
--no-dev-deps
Perform without dev-dependencies.
This is a workaround for an issue that dev-dependencies leaking into normal build (cargo#4866).
Also, this can be used as a workaround for an issue that
cargo
does not allow publishing a package with cyclic dev-dependencies. (cargo#4242)Currently, using
--no-dev-deps
flag removes dev-dependencies from real manifest while cargo-hack is running and restores it when finished. See cargo#4242 for why this is necessary. Also, this behavior may change in the future on some subcommands. See also #15. -
--remove-dev-deps
Equivalent to
--no-dev-deps
except for does not restore the originalCargo.toml
after execution.This is useful to know what Cargo.toml that cargo-hack is actually using with
--no-dev-deps
.This flag also works without subcommands.
-
--ignore-private
Skip to perform on
publish = false
packages. -
--ignore-unknown-features
Skip passing
--features
tocargo
if that feature does not exist.This is a workaround for an issue that
cargo
does not support for--features
with workspace (cargo#3620, cargo#4106, cargo#4463, cargo#4753, cargo#5015, cargo#5364, cargo#6195).This feature was formerly called
--ignore-non-exist-features
, but has been renamed. The old name can be used as an alias, but is deprecated.
cargo-hack
changes the behavior of the following existing flags.
-
--features
,--no-default-features
Unlike
cargo
(cargo#3620, cargo#4106, cargo#4463, cargo#4753, cargo#5015, cargo#5364, cargo#6195), it can also be applied to sub-crates. -
--all
,--workspace
Perform command for all packages in the workspace.
For example, running
cargo hack check --all
in a workspace with membersfoo
andbar
behaves almost the same as the following script:# If you use cargo-hack, you don't need to maintain this list manually. members=("foo" "bar") for; do done
Workspace members will be performed according to the order of the 'packages' fields of cargo-metadata.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.