- Introduction
- Qu'est-ce qu'un Target ?
- Format des Targets
- Targets Principaux
- Cross-Compilation
- Gestion des Targets
- Configuration dans Cargo.toml
- Exemples Pratiques
- Troubleshooting
- FAQ
Les targets (cibles) de build Rust définissent pour quelle plateforme (architecture CPU + système d'exploitation) votre code sera compilé. Rust supporte la cross-compilation, ce qui signifie que vous pouvez compiler pour une plateforme différente de celle sur laquelle vous travaillez.
- ✅ Cross-compilation native : Compiler pour d'autres plateformes depuis votre machine
- ✅ Support étendu : Des dizaines de targets disponibles
- ✅ Facile à utiliser :
rustup target addetcargo build --target - ✅ Performance : Compilation rapide même pour d'autres architectures
Un target est un triplet qui identifie une plateforme :
architecture-vendor-os-abi
Exemples :
x86_64-pc-windows-gnu: Windows 64-bit avec GCCx86_64-pc-windows-msvc: Windows 64-bit avec MSVCx86_64-unknown-linux-gnu: Linux 64-bitaarch64-apple-darwin: macOS Apple Siliconwasm32-unknown-unknown: WebAssembly
1. Architecture (CPU) :
x86_64: Processeurs 64-bit Intel/AMDi686: Processeurs 32-bit Intel/AMDaarch64: ARM 64-bitarm: ARM 32-bitwasm32: WebAssembly 32-bitriscv64: RISC-V 64-bit
2. Vendor (Fabricant) :
pc: PC standardapple: Appleunknown: Inconnu/génériquenvidia: NVIDIA (pour CUDA)
3. OS (Système d'exploitation) :
windows: Windowslinux: Linuxdarwin: macOS/iOSandroid: Androidfreebsd: FreeBSDnone: Pas de système d'exploitation (embeddé)
4. ABI (Application Binary Interface) :
gnu: GNU (Linux standard)msvc: Microsoft Visual C++ (Windows)musl: Musl libc (Linux léger)unknown: ABI inconnueabi: Embedded ABI
architecture-vendor-os-abi
Windows :
x86_64-pc-windows-gnu # Windows 64-bit avec MinGW/GCC
x86_64-pc-windows-msvc # Windows 64-bit avec MSVC (recommandé)
i686-pc-windows-gnu # Windows 32-bit avec MinGW
i686-pc-windows-msvc # Windows 32-bit avec MSVC
Linux :
x86_64-unknown-linux-gnu # Linux 64-bit standard
x86_64-unknown-linux-musl # Linux 64-bit avec musl (statique)
aarch64-unknown-linux-gnu # Linux ARM 64-bit
arm-unknown-linux-gnueabihf # Linux ARM 32-bit
macOS/iOS :
x86_64-apple-darwin # macOS Intel
aarch64-apple-darwin # macOS Apple Silicon
aarch64-apple-ios # iOS ARM 64-bit
x86_64-apple-ios # iOS Simulator
WebAssembly :
wasm32-unknown-unknown # WebAssembly standard
wasm32-wasip1 # WebAssembly System Interface
wasm32-unknown-emscripten # Emscripten
Embedded :
thumbv7em-none-eabihf # ARM Cortex-M avec FPU
riscv32imc-unknown-none-elf # RISC-V 32-bit
aarch64-unknown-none # ARM 64-bit bare metal
| Target | Description | Compilateur |
|---|---|---|
x86_64-pc-windows-msvc |
Windows 64-bit (recommandé) | MSVC |
x86_64-pc-windows-gnu |
Windows 64-bit | MinGW/GCC |
i686-pc-windows-msvc |
Windows 32-bit | MSVC |
i686-pc-windows-gnu |
Windows 32-bit | MinGW/GCC |
aarch64-pc-windows-msvc |
Windows ARM 64-bit | MSVC |
Recommandation : Utilisez -msvc pour de meilleures performances et compatibilité.
| Target | Description | Notes |
|---|---|---|
x86_64-unknown-linux-gnu |
Linux 64-bit standard | Nécessite glibc |
x86_64-unknown-linux-musl |
Linux 64-bit statique | Binaire autonome |
aarch64-unknown-linux-gnu |
Linux ARM 64-bit | Pour Raspberry Pi, etc. |
arm-unknown-linux-gnueabihf |
Linux ARM 32-bit | Pour ARMv7 |
Recommandation : Utilisez -musl pour des binaires statiques portables.
| Target | Description |
|---|---|
x86_64-apple-darwin |
macOS Intel |
aarch64-apple-darwin |
macOS Apple Silicon (M1/M2) |
Note : Apple recommande de compiler des universal binaries qui fonctionnent sur les deux.
| Target | Description |
|---|---|
wasm32-unknown-unknown |
WebAssembly standard |
wasm32-wasip1 |
WASI (WebAssembly System Interface) |
wasm32-unknown-emscripten |
Emscripten (legacy) |
Recommandation : Utilisez wasm32-unknown-unknown pour les applications web modernes.
| Target | Description |
|---|---|
aarch64-linux-android |
Android ARM 64-bit |
armv7-linux-androideabi |
Android ARM 32-bit |
x86_64-linux-android |
Android x86_64 |
La cross-compilation permet de compiler pour une plateforme différente de celle sur laquelle vous travaillez.
- ✅ Développement sur une seule machine : Compilez pour Windows, Linux, macOS depuis n'importe quelle plateforme
- ✅ CI/CD simplifié : Un seul serveur peut compiler pour toutes les plateformes
- ✅ Tests : Vérifiez que votre code compile sur différentes plateformes
⚠️ Dépendances natives : Certaines dépendances nécessitent des outils spécifiques⚠️ Tests : Vous ne pouvez pas exécuter les binaires cross-compilés directement⚠️ Temps de compilation : Peut être plus long pour certaines plateformes
rustup target listSortie :
aarch64-apple-darwin
aarch64-unknown-linux-gnu
x86_64-pc-windows-gnu (installed)
x86_64-pc-windows-msvc
wasm32-unknown-unknown
...
Les targets installés sont marqués (installed).
# Installer un target spécifique
rustup target add x86_64-unknown-linux-gnu
# Installer plusieurs targets
rustup target add wasm32-unknown-unknown aarch64-apple-darwinrustup target remove x86_64-unknown-linux-gnurustup showAffiche le target par défaut (généralement celui de votre machine).
cargo build
# Compile pour votre plateforme actuelle# Compiler pour Linux depuis Windows
cargo build --target x86_64-unknown-linux-gnu
# Compiler pour WebAssembly
cargo build --target wasm32-unknown-unknown
# Compiler pour macOS depuis Linux
cargo build --target x86_64-apple-darwincargo build --release --target x86_64-unknown-linux-gnuLes binaires compilés sont dans :
target/<target>/debug/<nom>
target/<target>/release/<nom>
Exemple :
target/x86_64-unknown-linux-gnu/release/mini_sheet
[build]
target = "x86_64-unknown-linux-gnu"[target.x86_64-unknown-linux-gnu]
linker = "x86_64-linux-gnu-gcc"
[target.wasm32-unknown-unknown]
runner = "wasm-bindgen-test-runner"Pour la cross-compilation, vous devez souvent spécifier un linker :
[target.x86_64-unknown-linux-gnu]
linker = "x86_64-linux-gnu-gcc"
[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"[target.'cfg(target_os = "windows")'.dependencies]
winapi = "0.3"
[target.'cfg(target_os = "linux")'.dependencies]
libc = "0.2"1. Installer le target :
rustup target add x86_64-unknown-linux-gnu2. Installer les outils (si nécessaire) :
# Sur Windows avec MSYS2
pacman -S mingw-w64-x86_64-gcc3. Configurer Cargo.toml :
[target.x86_64-unknown-linux-gnu]
linker = "x86_64-linux-gnu-gcc"4. Compiler :
cargo build --release --target x86_64-unknown-linux-gnu1. Installer le target :
rustup target add wasm32-unknown-unknown2. Compiler :
cargo build --release --target wasm32-unknown-unknown3. Le binaire sera dans :
target/wasm32-unknown-unknown/release/mini_sheet.wasm
1. Installer le target :
rustup target add x86_64-apple-darwin2. Installer osxcross (outil de cross-compilation macOS) :
# Nécessite osxcross et le SDK macOS
# Voir : https://github.com/tpoechtrager/osxcross3. Configurer :
[target.x86_64-apple-darwin]
linker = "x86_64-apple-darwin-clang"1. Installer les targets Android :
rustup target add aarch64-linux-android
rustup target add armv7-linux-androideabi
rustup target add x86_64-linux-android2. Installer le NDK Android :
- Télécharger Android NDK
- Configurer les variables d'environnement
3. Compiler :
cargo build --release --target aarch64-linux-android1. Installer le target :
rustup target add thumbv7em-none-eabihf2. Compiler :
cargo build --release --target thumbv7em-none-eabihfVous pouvez configurer des variables d'environnement pour la cross-compilation :
# Linker personnalisé
export CC_x86_64_unknown_linux_gnu=x86_64-linux-gnu-gcc
export CXX_x86_64_unknown_linux_gnu=x86_64-linux-gnu-g++
# Compiler
cargo build --target x86_64-unknown-linux-gnuCréez .cargo/config.toml à la racine de votre projet :
[build]
target = "x86_64-unknown-linux-gnu" # Target par défaut
[target.x86_64-unknown-linux-gnu]
linker = "x86_64-linux-gnu-gcc"
runner = "qemu-x86_64"
[target.wasm32-unknown-unknown]
runner = "wasm-bindgen-test-runner"# Installer une toolchain pour un target spécifique
rustup toolchain install stable-x86_64-unknown-linux-gnu
# Utiliser cette toolchain
cargo +stable-x86_64-unknown-linux-gnu build --target x86_64-unknown-linux-gnuProblème : Le linker pour le target n'est pas installé.
Solution :
# Installer le linker (exemple pour Linux depuis Windows)
# Sur Windows avec MSYS2
pacman -S mingw-w64-x86_64-gcc
# Configurer dans .cargo/config.toml
[target.x86_64-unknown-linux-gnu]
linker = "x86_64-linux-gnu-gcc"Problème : Une bibliothèque système est manquante.
Solution :
- Installer les bibliothèques de développement pour le target
- Utiliser des dépendances Rust pures quand possible
- Utiliser
-muslpour des binaires statiques
Problème : Le target n'est pas installé.
Solution :
rustup target add <target>Problème : Les build scripts (build.rs) peuvent nécessiter des outils spécifiques.
Solution :
- Vérifier que tous les outils nécessaires sont installés
- Utiliser des variables d'environnement pour pointer vers les outils
- Considérer désactiver certains build scripts si possible
Solution :
[profile.release]
opt-level = "z" # Optimiser pour la taille
lto = true # Link-Time Optimization
strip = true # Supprimer les symbolesR:
- Recommandé :
x86_64-pc-windows-msvc(meilleure compatibilité) - Alternative :
x86_64-pc-windows-gnu(si vous utilisez MinGW)
R: Utilisez le target -musl :
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-muslLe binaire sera statique et portable.
R: Techniquement oui, mais c'est complexe :
- Nécessite le SDK macOS (propriétaire Apple)
- Nécessite
osxcross - Recommandation : Utiliser un Mac ou CI/CD (GitHub Actions, etc.)
R: Utilisez un script ou CI/CD :
#!/bin/bash
for target in \
x86_64-pc-windows-msvc \
x86_64-unknown-linux-gnu \
x86_64-apple-darwin
do
cargo build --release --target $target
doneR: Non, les binaires compilés pour un target spécifique ont les mêmes performances que s'ils étaient compilés nativement sur cette plateforme.
R:
- Sur la même machine : Non (sauf avec émulateurs comme QEMU)
- Sur la machine cible : Oui, transférez et exécutez-le
- Tests unitaires : Oui, Rust peut compiler et exécuter les tests pour le target
R:
- Pour votre machine :
rustup showaffiche le target par défaut - Pour une autre machine : Utilisez le target correspondant à son architecture et OS
- Pour le web :
wasm32-unknown-unknown
R: La plupart oui, mais certaines dépendances :
- Nécessitent des bibliothèques système spécifiques
- Ne supportent pas tous les targets
- Peuvent nécessiter des features spécifiques
Vérifiez la documentation de chaque dépendance.
R:
# Installer le target 32-bit
rustup target add i686-pc-windows-msvc
# Compiler
cargo build --target i686-pc-windows-msvcR: Oui, c'est une cross-compilation standard :
rustup target add aarch64-unknown-linux-gnu
cargo build --target aarch64-unknown-linux-gnu# Lister tous les targets disponibles
rustup target list
# Lister les targets installés
rustup target list --installed
# Installer un target
rustup target add <target>
# Désinstaller un target
rustup target remove <target>
# Compiler pour un target spécifique
cargo build --target <target>
# Compiler en release pour un target
cargo build --release --target <target>
# Voir le target par défaut
rustup show
# Voir les toolchains installées
rustup toolchain list
# Installer une toolchain pour un target
rustup toolchain install stable-<target>| Target | Plateforme | Usage |
|---|---|---|
x86_64-pc-windows-msvc |
Windows 64-bit | ✅ Recommandé pour Windows |
x86_64-unknown-linux-gnu |
Linux 64-bit | Linux standard |
x86_64-unknown-linux-musl |
Linux 64-bit | Binaire statique |
x86_64-apple-darwin |
macOS Intel | macOS Intel |
aarch64-apple-darwin |
macOS Apple Silicon | macOS M1/M2 |
wasm32-unknown-unknown |
WebAssembly | Applications web |
aarch64-linux-android |
Android ARM 64-bit | Applications Android |
thumbv7em-none-eabihf |
ARM Cortex-M | Microcontrôleurs |
Pour compiler MiniSheet pour différentes plateformes :
1. Windows (par défaut) :
cargo build --release
# → target/release/mini_sheet.exe2. Linux :
rustup target add x86_64-unknown-linux-gnu
cargo build --release --target x86_64-unknown-linux-gnu
# → target/x86_64-unknown-linux-gnu/release/mini_sheet3. WebAssembly :
rustup target add wasm32-unknown-unknown
cargo build --release --target wasm32-unknown-unknown
# → target/wasm32-unknown-unknown/release/mini_sheet.wasmNote : Pour WebAssembly, vous devrez peut-être adapter le code pour utiliser wasm-bindgen ou wasm-pack.
Dernière mise à jour : 2026-01-20