Como já foi mencionado no comentário, por padrão, o trio de destino é gerado por config.guess . Sua lógica é bastante simples. Primeiro, ele usa uname
para obter algumas informações básicas do sistema:
UNAME_MACHINE='(uname -m) 2>/dev/null' || UNAME_MACHINE=unknown
UNAME_RELEASE='(uname -r) 2>/dev/null' || UNAME_RELEASE=unknown
UNAME_SYSTEM='(uname -s) 2>/dev/null' || UNAME_SYSTEM=unknown
UNAME_VERSION='(uname -v) 2>/dev/null' || UNAME_VERSION=unknown
Essas cadeias são combinadas e combinadas com padrões codificados. O resultado também é codificado:
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
...(snip)...
x86_64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
...(snip)...
Para alguns sistemas, é possível fornecer resultados mais significativos, como o IBM em "rs6000-ibm-aix".
Os mantenedores de distribuição simplesmente sobrescrevem essa string com a sua própria (também codificada):
$ gcc -v
...(snip)...
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.9.2-10'
...(snip)...
--target=x86_64-linux-gnu
O GCC 6 provavelmente exibirá x86_64-pc-linux-gnu por padrão: atualizado config.guess no repositório upstream.