El script ./configure
acepta 3 opciones --build
, --host
y --target
. Estoy confundiendo sus roles. ¿Cuál es la diferencia y la semántica de ellos?
121
El script ./configure
acepta 3 opciones --build
, --host
y --target
. Estoy confundiendo sus roles. ¿Cuál es la diferencia y la semántica de ellos?
--host
y--build
. Tengo dos proyectos en C ++ y es imposible compilar para Android porque Autotools está muy jodido. Insiste en ejecutar pruebas utilizando la cadena de herramientas del host.Respuestas:
Como se señaló en esta publicación de blog y aludido en los Términos de configuración de GCC ,
--target
solo se aplica cuando compila cadenas de herramientas. Cuando realiza una compilación cruzada normal de una biblioteca o binario que utilizaSin embargo, cuando está creando cadenas de herramientas, las cosas pueden volverse más complicadas. Creo que lo siguiente es correcto (aunque no puedo decir que haya compilado manualmente un depurador cruzado):
Digamos que tienes:
Configurar y construir su servidor de depuración (por ejemplo, gdbserver) para que se ejecute en su dispositivo integrado con
para que pueda poner masilla en su dispositivo integrado y ejecutar "gdbserver: 1234 a.out" para comenzar a depurar y escuchar en el puerto 1234.
Luego construiría su cliente de depuración (que se conecta y controla el gdbserver) con
que copiarías a tu computadora portátil x86 para que en el campo puedas ejecutar "gdbclient embedded.device: 1234" para depurar tu programa a.out.
Todo esto también se aplica a los compiladores para los que es posible que desee consultar el enlace de GCC anterior o esta sección sobre la compilación cruzada canadiense .
También tenga en cuenta que, en la práctica, es posible que no vea especificación de compilación, host o destino porque, de acuerdo con esta página del manual de Autoconf , "el objetivo predeterminado es host, host para compilar y compilar según el resultado de config.guess".
En una palabra, compile el código
--build
, ejecútelo--host
con el--target
entorno de arquitectura.fuente
Nota: El argumento
--target
solo tiene sentido cuando se compila el compilador (por ejemplo, GCC). Cuando se ejecutaconfigure
antes de construir GCC:--build
: la máquina en la que está construyendo--host
: la máquina para la que está construyendo--target
: la máquina que GCC producirá binario paraDe la documentación de GCC ( notas de instalación específicas de Host / Target ):
fuente
--target
que no es relevante para ningún proyecto que no sea en sí mismo un compilador. Entonces, ¿por qué es una opción de configuración estándar? Confuso.configure
no es exactamente un pináculo del diseño bueno y limpio; Supongo que es solo el resultado del deslizamiento de características específicas de la aplicación.