‫Hola y bienvenido.
‫En esta lección, vamos a comprender los pasos principales involucrados en la compilación de archivos C++ en
‫Unreal.
‫Vamos a sumergirnos y ver cómo funcionan.
‫Así que pronto será el momento de que empecemos a usar código externo, de otros archivos, y necesitamos
‫aprender cómo funciona esto en C++.
‫Para hacer eso, necesitamos desviarnos un poco y comprender con más detalle
‫lo que sucede cuando compilamos nuestro código C++ en binario.
‫Así que aquí están los pasos de compilación que se utilizan.
‫Comenzamos con su código, sus archivos C++, su encabezado de archivos, todo en varios archivos de texto.
‫Estos se introducen en una herramienta llamada Unreal Handed Tool.
‫Ahora, esta herramienta es responsable de tomar todas las piezas de sintaxis específicas e irreales y usarlas
‫para generar más código C++.
‫Entonces, echemos un vistazo a algunos ejemplos de dónde tenemos esta sintaxis específica irreal, esta nueva clase
‫en letras mayúsculas que es una sintaxis específica irreal, y también lo es la API de Crypt Reader aquí y el
‫cuerpo generado allí.
‫Y básicamente lo que está pasando aquí es que la herramienta de encabezado irreal verá estas diferentes piezas de sintaxis en su
‫código y dirá, está bien, necesito hacer mi trabajo.
‫Necesito ir allí, necesito agregar un montón de cosas.
‫Reemplazará su cuerpo generado con un montón de código que nos facilita la vida cuando usamos
‫Unreal.
‫También hace cosas como las propiedades U y las funciones U.
‫Agrega todo lo que necesita para poder comunicarse con el mundo de los planos.
‫Así que ese es el primer paso.
‫Convierte todas sus cosas específicas irreales en C++ real.
‫Una vez que tenemos el C++ real, podemos introducirlo en un proceso de compilación de C++ estándar, que consta
‫de tres pasos.
‫El primero es lidiar con el paso de preprocesamiento, por lo que en realidad tocará cualquiera de la sintaxis de C ++ y en
‫realidad solo trata con líneas que comienzan con un hash.
‫Así que tenemos algunas de estas directivas de preprocesamiento.
‫Estos son tratados por el preprocesador.
‫El siguiente paso es lo que en realidad llamamos el compilador.
‫Toma un código y lo convierte en binario ejecutable, pero no completa del todo el paso porque solo
‫lo hace en C++ individuales, lo que se conoce como unidades de traducción, básicamente archivos C++.
‫Así que toma un archivo C++ y lo traduce a binario individualmente, cada archivo C++ individual.
‫Y luego, el tercer paso es el enlazador, que reúne todo eso y genera un ejecutable que en
‫realidad podemos ejecutar como un solo ejecutable.
‫Así que echemos un vistazo a estos pasos de compilación estándar con un poco más de detalle con un archivo de
‫ejemplo.
‫Así que imagina que tuviéramos un juego punto CP y es un juego muy, muy simple porque todo lo que hace es sumar
‫uno más uno.
‫Pero para sumar uno y uno juntos, tiene que usar una función que está declarada en un archivo diferente en las
‫matemáticas dos.
‫H Así que las matemáticas declaran ad, pero en realidad no definen lo que hace.
‫Así que eso se vuelve a hacer en el paso de puntos matemáticos.
‫Y puede ver que es una implementación muy simple.
‫Ahora, ¿qué sucede en el paso de preprocesamiento?
‫Bueno, como dije, se ocupa de las directivas de preprocesador, que son cosas que comienzan con un
‫hash.
‫Entonces, el hash incluye matemáticas, lo que básicamente significa simplemente copiar todo en Master H aquí.
‫Entonces, lo que hace es tomar estos dos archivos y los combina para crear un
‫nuevo archivo de salida llamado game dot. Básicamente juego para incluir y puedes ver que está incluido.
‫La definición de masturbación ha reemplazado la directiva del preprocesador hash.
‫Así que ahora game dot II tiene una definición para la operación de adición y luego ejecutamos el preprocesador en math dot
‫CVP.
‫Pero debido a que no tiene directivas de preprocesador, básicamente no se cambia nada allí.
‫El siguiente paso es la compilación, es probablemente el paso más importante y
‫complicado, porque lo que hace es tomar ese C++ en cada archivo individual y convertirlo en binario, pero no es un binario
‫completo porque, por ejemplo, mi juego en realidad no sabe cómo implementar y solo conoce la forma de esa
‫función de agregar.
‫Eso debe completarse más tarde y el enlazador lo completa.
‫Entonces, el enlace tomará el binario, lo creará para el archivo game dot obj y el binario creado
‫para el archivo de método y los juntará para crear un game dot xy que combina el binario
‫para ambos y finalmente es un ejecutable completo que nosotros en realidad puede ejecutarse porque tiene la definición de todo lo que
‫necesita.
‫Ahora bien, ¿por qué tenemos un proceso tan complicado?
‫La idea aquí es que acelera nuestro tiempo de compilación.
‫Porque si solo hiciera una cadena.
‫Para jugar dot sleep.
‫En realidad, no necesito ejecutar todo el proceso de compilación.
‫Todo lo que tengo que hacer es ejecutar los bits relacionados con Game Dot CBP, por lo que ejecutaría el preprocesador solo en el CP.
‫Luego ejecutaría el compilador solo en el juego para I.
‫Y luego puedo reutilizar el archivo obj de puntos matemáticos de antes.
‫No necesito volver a compilarlo porque nada ha cambiado en eso.
‫Del mismo modo, si solo cambio el CP del punto matemático, no tendría que volver a compilar el juego en un archivo OBJ, por lo
‫que este es un proceso más eficiente y por lo que lo estamos haciendo en primer lugar.
‫Así que me gustaría que hiciéramos un pequeño experimento e intentáramos averiguar por qué incluimos move a doth in y
‫movemos su archivo dot CP.
‫¿Cuál es la razón de ello?
‫¿Por qué no podemos simplemente compilar el archivo C++ sin incluir move dot h.
‫Entonces, el experimento que vamos a hacer es comentar la línea de inclusión hash.
‫Entonces, usar una barra diagonal doble para hacer un comentario delante de esa línea, lo que básicamente
‫hará que el preprocesador lo elimine en lugar de que el preprocesador lo reemplace con el contenido del
‫archivo.
‫Luego vamos a volver a compilar y me gustaría que eches un vistazo a los mensajes de error que aparecen
‫y veas lo que dice para ver si puedes tratar de entender para qué estamos incluyendo este movimiento.
‫Pausa el video y pruébalo.
‫Bueno.
‫Bienvenido de nuevo.
‫Así que pongamos una barra inclinada doble al comienzo de esta línea, lo que básicamente la anula y no tiene
‫valor.
‫Y luego vamos a hacer un control alt f 11 y vamos a echar un vistazo a la salida de la codificación en vivo.
‫Así que mira, tenemos algunos errores muy, muy pronto.
‫Y lo que está diciendo es que tu mover no es una clase o un espacio de nombres y hay algunas otras cosas aquí
‫abajo.
‫Está diciendo que el componente tecnológico principal ha sido declarado super está en la clase o que el propietario del espacio de
‫nombres es un identificador desconocido.
‫Y básicamente lo que esto quiere decir es que ha hablado de su motor aquí, pero no lo ha definido de todos
‫modos, no lo ha declarado en ninguna parte.
‫Así que no lo sé.
‫El compilador de C++ dice, no sé qué es esto.
‫Entonces es por eso que estamos incluyendo hash el mover dot h porque muévelo o H declara la clase.
‫Dice que un motor U es una clase y se deriva de que actúas como un componente y tiene estos métodos, etc.
‫está declarando lo que significa ser esa clase.
‫Entonces, sin esa declaración, el compilador de C++ no puede continuar y es por eso que necesitamos incluir ese archivo de
‫encabezado.
‫Buena cosa.
‫Así que espero que ahora entiendas un poco mejor el proceso involucrado en la compilación de C++ y particularmente
‫la compilación de C++ en Unreal.
‫Te veré en la próxima conferencia.