¿Es posible generar la salida y compilación del preprocesador en un solo paso con GCC?Salida y compilación del preprocesador GCC en una pasada
Algo así como:
gcc -E -c main.cc -o main.o
que generaría main.oe main.i
¿Es posible generar la salida y compilación del preprocesador en un solo paso con GCC?Salida y compilación del preprocesador GCC en una pasada
Algo así como:
gcc -E -c main.cc -o main.o
que generaría main.oe main.i
Sí.
Mire gcc
-save-temps
opción.
Compila el archivo fuente y guarda el resultado del preproceso en un archivo .i
. (También guarda el resultado de la fase del ensamblador en un archivo .s
).
gcc -save-temps -c main.cc -o main.o
generará main.o
sino también main.i
y main.s
.
main.i
es el resultado del preprocesamiento.
No, no con -E
sí, las opciones -s
, -c
y -E
se denominan opciones "STOP". De hecho, detienen el proceso en un punto específico, por lo que no puedes continuar.
Si desea hacer eso, debe hacerlo en dos pasos, o use -save-temps
para conservar copias de los archivos temporales normalmente eliminados durante la compilación.
Desde la página de manual gcc
, discutiendo cosas -E
(ligeramente parafraseado):
Si sólo desea algunas de las etapas de compilación, puede utilizar -x (o sufijos de nombre de archivo) para decirle a gcc dónde empezar y una de las opciones -c, -S, o -E para decir dónde se detendrá gcc. Tenga en cuenta que algunas combinaciones (por ejemplo, -x cpp-output -E) indican a gcc que no haga nada en absoluto.
-E significa: detener después de la etapa de preprocesamiento; no ejecute el compilador propiamente La salida es en forma de código fuente preprocesado, que se envía a la salida estándar (o al archivo de salida si se especifica -o).
Si usa la opción -E, no se hace nada excepto el preprocesamiento.
y una descripción de -save-temps
:
-save-temps
Almacenar los archivos intermedios habituales "temporales" de forma permanente; colóquelos en el directorio actual y nómbrelos según el archivo fuente.
Por lo tanto, compilar foo.c con -c -save-temps produciría archivos foo.i y foo.s, así como también foo.o.
Esto crea un archivo de salida foo.i preprocesado aunque el compilador ahora normalmente usa un preprocesador integrado.
¡Gracias por la información detallada! – alesko
¡Esto funciona perfectamente! ¡Gracias! – alesko
@alesko ¡De nada! – ouah
mi compilador basado en gcc solo guarda el archivo '.s' – Adrian