# Exporting cargo compiler artifacts (tests, benches)
## Motivation
It's quite challenging to export secondary artifacts like tests and benchmark executables. Those kind of artifacts can
be very valuable for different reasons:
1. packing test executables in the contaier to run them later on a different platform
2. comparing and analyzing assembly of performance benchmarks
For final artifacts we have `target/(release|debug)/{crate-name}`, but test and benchmark executables are containing
hash like `target/release/deps/app-25de5d28a523d3c2`. Moreover it changes every time compiler options are changed. For
this reason methods like `find` and `cp` doesn't work well for extracting such artifacts.
Thankfully, compiler provide service messages (`cargo build --message-format=json`) which allows to list all the
artifacts generated by the compiler.
## Installing
```console
$ cargo install cargo-export
```
## Using
- export all test binaries to `target/tests` directory
```console
$ cargo export target/tests -- test
```
Under the hood this command will run `cargo test --no-run --message-format=json` and copy all the generated binaries in the `target/tests` directory.
- export all benchmark binaries to `target/bench` directory
```console
$ cargo export target/bench -- bench
```
- export all benchmark binaries to `target/bench` directory and add postfix `-main` to each executable
```console
$ cargo export target/bench -t main -- bench
```