TL;DR
コンパイラが動いている環境とは別のプラットフォーム向けに、実行ファイルを作ること。そのためのコンパイラをクロスコンパイラと呼ぶ。
なぜ必要か
Wikipedia によると、組み込みシステムのマイクロコントローラは必要最小限のメモリしか搭載していないことが多く、その上でコンパイラや開発環境を動かすのは現実的でない。また、1 つのビルド環境から複数の OS やアーキテクチャ向けにコンパイルできる。
仕組み
GNU autotools の用語では、コードを実際にコンパイルする場所をビルドプラットフォーム、コンパイルしたコードが実行される場所をホストプラットフォームと呼ぶ。
Rust では、rustup はツールチェインを入れたときにホストのプラットフォーム向けの標準ライブラリしか入れない。別のターゲット向けにビルドするには、rustup target add でそのターゲットの標準ライブラリを入れ、cargo build --target=<ターゲット> でビルドする。
例
Effective Rust 項目33 では、ライブラリが no_std 互換であることを確かめるために、thumbv6m-none-eabi のように std をサポートしないターゲットへクロスコンパイルするチェックを CI に足すことを勧めている。
注意点
rustup の rustup target add が入れるのは標準ライブラリだけである。クロスコンパイルには、特にリンカなどの他のツールも必要で、それらは自分で用意する。