public static void CompilarYEjecutar() { CompiladorAsm compiladorAsm; CompiladorC compiladorC; Compilador compilador; compiladorAsm = new CompiladorAsm( "", "nasm.exe" ); compiladorC = new CompiladorC( "", "gcc.exe" ); compilador = new Compilador( "", "gcc.exe", "salida.txt", "error.txt" ); try { Ejecutor.ArchivoSalida = salidaPorArchivo? archSalida : "salida.txt"; Ejecutor.ArchivoError = "errorEjecucion.txt"; // if( esAssembler ) compiladorAsm.Compilar( "-fcoff", "timer.asm" ); compiladorC.Compilar( "-c -o codigoProbador.o", "codigoProbador.c" ); /* string[] archivos = new string[2]; archivos[1] = "codigoProbador.o"; if( esAssembler ) archivos[0] = "timer.o"; else archivos[0] = archFuncion; * */ string[] archivos; if (esAssembler) { archivos = new string[2]; archivos[0] = "timer.o"; archivos[1] = "codigoProbador.o"; } else { archivos = new string[3]; archivos[0] = archFuncion; archivos[1] = "timer.o"; archivos[2] = "codigoProbador.o"; } //Genera un .exe resultado de enlazar los 2 anteriores. compilador.Enlazar( "prueba.exe", archivos ); Ejecutor.Ejecutar( "prueba.exe" ); Console.Write( Ejecutor.ObtenerSalida() ); } finally { if( esAssembler ) compiladorAsm.BorrarArchivosSalidaYError(); compiladorC.BorrarArchivosSalidaYError(); compilador.BorrarArchivosSalidaYError(); Ejecutor.BorrarArchivosTemporales( !salidaPorArchivo ); File.Delete( "codigoProbador.o" ); File.Delete( "timer.o" ); } }
public static string ErrorAlCompilar( Compilador compilador, string comando, string descripcion ) { string mensaje = string.Empty; if( compilador is CompiladorAsm ) mensaje = "Error de compilación ASM: "; if( compilador is CompiladorC ) mensaje = "Error de compilación C: "; if( mensaje==string.Empty ) mensaje = "Error en enlace: "; mensaje += "\nComando: " + comando; mensaje += "\nDescripción: \n" + descripcion + "\n\n"; return mensaje; }
public static string ErrorAlCompilar( Compilador compilador, string comando, Exception excepcion ) { return ErrorAlCompilar( compilador, comando, MA.ExcepcionCompleta( excepcion ) ); }