I compilatori hanno un target di compilazione che determina quale codice oggetto dell'architettura verrà prodotto. Nel lontano passato, le toolchain di sviluppo erano un affare one-architecture-per-compiler-binary, in cui il compilatore e il linker producevano un tipo di risultato. Ciò è cambiato quando GCC è stato ristrutturato, quindi un'installazione su un'architettura potrebbe eseguire una compilazione incrociata con qualsiasi altra supportata . GCC ha adottato l'opzione -m
(per macchina ) per specificare questo parametro.
Essendo parte della stessa toolchain, lo stesso switch è stato trasferito al linker. Invece di determinare l'architettura della macchina, -m
determina quale formato eseguibile (tra le altre cose) sarà prodotto dagli oggetti e dalle librerie essere collegato. Mentre il mondo stava compiendo il passaggio da COFF a ELF, non era insolito dover collegare l'uno o l'altro senza dover costruire una macchina separata per farlo. Normalmente, si impostano diversi parametri per far sì che il linker generi un file per un dato sistema; dato che -m
in GNU ld ha approssimativamente lo stesso scopo di GCC, è per questo che è stato usato.
L'architettura della macchina non è il termine giusto in quanto i formati eseguibili non sono necessariamente specifici dell'architettura della macchina. Se dovessi fare un'ipotesi su come la documentazione ha ottenuto dove è stata fatta, sarebbe stato che qualcuno l'avesse notato, provato a ricoprire qualcosa che era iniziato con M , non riusciva a trovare nulla che avrebbe funzionato e deciso per andare con eMulation .