O script ./configure
aceita 3 opções --build
, --host
e --target
. Estou confundindo os papéis deles. Qual a diferença e semântica deles?
121
O script ./configure
aceita 3 opções --build
, --host
e --target
. Estou confundindo os papéis deles. Qual a diferença e semântica deles?
--host
e--build
. Eu tenho dois projetos em C ++ e é impossível criar para o Android porque o Autotools está tão fodido. Ele insiste em executar testes usando a cadeia de ferramentas do host.Respostas:
Conforme observado nesta postagem do blog e mencionado nos Termos de configuração do GCC ,
--target
só se aplica quando você está compilando cadeias de ferramentas. Ao fazer uma compilação cruzada normal de uma biblioteca ou binário, você usaNo entanto, quando você está construindo toolchains, as coisas podem ficar mais complicado. Eu acho que o seguinte está correto (embora eu não possa dizer que já compilei manualmente um depurador cruzado):
Vamos dizer que você tem:
Você configuraria e construiria seu servidor de depuração (por exemplo, gdbserver) para executar no seu dispositivo incorporado com
para que você possa colar no dispositivo incorporado e executar "gdbserver: 1234 a.out" para iniciar a depuração e escutar na porta 1234.
Você criaria seu cliente de depuração (que se conecta e controla o gdbserver) com
que você copiava no seu laptop x86 para que, em campo, você pudesse executar "gdbclient embedded.device: 1234" para depurar o programa a.out.
Isso também se aplica aos compiladores para os quais você pode querer consultar o link do GCC acima ou esta seção sobre a compilação cruzada do Canadá .
Observe também que, na prática, talvez você não veja build, host ou destino especificado porque, de acordo com esta página de manual do Autoconf , "o padrão é o destino do host, o host a ser construído e o resultado do config.guess".
Em uma palavra, construa o código
--build
, execute-o--host
com o--target
ambiente de arquitetura.fonte
Nota: O argumento
--target
só faz sentido ao criar o compilador (por exemplo, GCC). Ao executarconfigure
antes de criar o GCC:--build
: a máquina em que você está construindo--host
: a máquina para a qual você está construindo--target
: a máquina que o GCC produzirá binário paraNa documentação do GCC ( notas de instalação específicas do host / destino ):
fonte
--target
não é relevante para nenhum projeto que não seja um compilador. Então, por que é uma opção de configuração padrão? Confuso.configure
não é exatamente um pináculo do design bom e limpo; Eu acho que é apenas o resultado da fluência de recursos específicos de aplicativos.