‫Olá e bem-vindo.
‫Nesta palestra, vamos entender as principais etapas envolvidas na compilação de arquivos C++ no
‫Unreal.
‫Vamos mergulhar e ver como eles funcionam.
‫Então, em breve será a hora de começarmos a usar código de fora, de outros arquivos, e precisamos
‫aprender como isso funciona em C++.
‫Para fazer isso, precisamos fazer um pequeno desvio e entender com mais detalhes
‫o que está acontecendo quando compilamos nosso código C++ em binário.
‫Então, aqui estão as etapas de compilação que são usadas.
‫Começamos com seu código, seus arquivos C++, seu cabeçalho de arquivos, tudo em vários arquivos de texto.
‫Estes são alimentados em uma ferramenta chamada Unreal Handed Tool.
‫Agora, essa ferramenta é responsável por pegar todas as partes específicas irreais da sintaxe e usá-las
‫para gerar mais código C++.
‫Então, vamos dar uma olhada em alguns exemplos de onde temos essa sintaxe específica irreal, essa nova classe
‫em letras maiúsculas que é uma sintaxe específica irreal, e assim é a coisa da API Crypt Reader aqui e o
‫corpo gerado ali.
‫E basicamente o que está acontecendo aqui é que a ferramenta de cabeçalho irreal verá essas diferentes partes da sintaxe em
‫seu código e dirá, ok, preciso fazer meu trabalho.
‫Eu preciso ir lá, eu preciso adicionar um monte de coisas.
‫Ele vai substituir seu corpo gerado por um monte de código que facilita nossas vidas ao usar o
‫Unreal.
‫Ele também faz coisas como as propriedades U e funções U.
‫Ele adiciona todas as coisas de que precisa para poder se comunicar com o mundo do projeto.
‫Então esse é o primeiro passo.
‫Ele converte todas as suas coisas específicas irreais em C++ real.
‫Uma vez que tenhamos o C++ real, podemos alimentá-lo em um processo de compilação C++ padrão, que
‫leva três etapas.
‫A primeira é lidar com a etapa de pré-processamento, então isso realmente tocará qualquer sintaxe C++ e, na verdade, lidará
‫apenas com linhas que começam com um hash.
‫Temos algumas dessas diretivas de pré-processamento.
‫Estes são tratados pelo pré-processador.
‫O próximo passo é o que chamamos de compilador.
‫Ele pega um código e o converte em binário executável, mas não completa o passo porque só
‫o faz em C++ individuais, que são conhecidos como unidades de tradução, basicamente arquivos C++.
‫Portanto, ele pega um arquivo C++ e o traduz em binário individualmente, cada arquivo C++ individual.
‫E então a terceira etapa é o linker, que reúne tudo isso e gera um executável que
‫podemos realmente executar um único executável.
‫Então, vamos dar uma olhada nessas etapas de compilação padrão com um pouco mais de detalhes com um arquivo de
‫exemplo.
‫Então imagine que tivéssemos um jogo ponto CP e é um jogo muito, muito simples, porque tudo o que ele faz é adicionar um
‫e um juntos.
‫Mas para somar um e um, ele está tendo que usar uma função que está declarada em um arquivo diferente na
‫matemática dois.
‫H Portanto, a matemática declara ad, mas na verdade não define o que ela faz.
‫Então, isso é feito na etapa de pontos matemáticos.
‫E você pode ver que é uma implementação muito simples.
‫Agora, o que acontece na etapa de pré-processamento?
‫Bem, como eu disse, ele lida com quaisquer diretivas de pré-processador, que são coisas que começam com um
‫hash.
‫Portanto, o hash inclui matemática, o que basicamente significa apenas copiar tudo no Master H aqui.
‫Então, o que ele faz é pegar esses dois arquivos e combiná-los para criar um novo arquivo
‫de saída chamado game dot eu basicamente jogo para incluir e você pode ver que ele está incluído.
‫A definição de masturbação substituiu a diretiva do pré-processador de hash.
‫Então agora o game dot II tem uma definição para a operação add e então rodamos o pré-processador no math dot
‫CVP.
‫Mas como ele não possui diretivas de pré-processador, basicamente nada é alterado lá.
‫O próximo passo é que a compilação é provavelmente o passo mais
‫importante e complicado, porque o que ele faz é pegar aquele C++ em cada arquivo individual e convertê-lo em binário, mas não
‫é um binário completo porque, por exemplo, meu jogo não sabe como implementar e sabe apenas a forma dessa
‫função de adição.
‫Então, isso precisa ser preenchido mais tarde e é preenchido pelo vinculador.
‫Então o link vai pegar o binário, cria-lo para o arquivo dot obj do jogo e o binário
‫criado para o arquivo do método e reuni-los para fazer um jogo dot xy que combina o binário
‫para ambos e finalmente é um executável completo que nós pode realmente funcionar porque tem a definição para tudo o que
‫precisa.
‫Agora, por que temos um processo tão complicado?
‫A ideia aqui é que isso acelere nosso tempo de compilação.
‫Porque se eu apenas fizesse uma corrente.
‫Para jogar dot sleep.
‫Na verdade, não preciso executar todo o processo de compilação.
‫Tudo o que tenho que fazer é rodar os bits envolvendo o game dot CBP, então eu rodaria o pré-processador apenas no CP.
‫Então eu executaria o compilador apenas no jogo para I.
‫E então eu posso reutilizar o arquivo obj de ponto matemático de antes.
‫Eu não preciso recompilá-lo porque nada mudou nisso.
‫Da mesma forma, se eu alterar apenas o math dot CP, não precisaria recompilar o jogo para o arquivo OBJ, e é por isso
‫que esse é um processo mais eficiente e por que estamos fazendo isso em primeiro lugar.
‫Então, eu gostaria que fizéssemos um pequeno experimento e tentasse descobrir por que incluímos mover um ponto h e mover
‫seu arquivo de ponto CP?
‫Qual é a razão disso?
‫Por que não podemos simplesmente compilar o arquivo C++ sem incluir move dot h.
‫Então, o experimento que vamos fazer é comentar a linha de inclusão de hash.
‫Portanto, usando uma barra dupla para fazer um comentário na frente dessa linha, o que
‫basicamente fará com que seja removido pelo pré-processador em vez do pré-processador substituindo-o pelo conteúdo do
‫arquivo.
‫Em seguida, vamos recompilar e gostaria que você desse uma olhada nas mensagens de erro que aparecem e veja
‫o que diz para ver se você pode tentar entender para que estamos incluindo essa mudança.
‫Pause o vídeo e vá em frente.
‫OK.
‫Bem vindo de volta.
‫Então, vamos colocar uma barra dupla no início desta linha, o que basicamente a torna nula e sem
‫efeito.
‫E então vamos fazer um controle alt f 11 e vamos dar uma olhada na saída da codificação ao vivo.
‫Então veja, nós temos alguns erros logo no início.
‫E o que está dizendo é que você move não é uma classe ou namespace e há algumas outras coisas aqui
‫embaixo.
‫Está dizendo que o componente de tecnologia primária foi declarado super está na classe ou o proprietário do namespace
‫é um identificador desconhecido.
‫E basicamente o que isso está dizendo é que você falou sobre você se mudar para cá, mas você não definiu de
‫qualquer maneira, você não declarou em lugar nenhum.
‫Então eu não sei.
‫O compilador C++ diz, eu não sei o que é isso.
‫Então é por isso que somos hash incluindo o movedor dot h porque mova-o ou H declara a classe.
‫Ele diz que um motor U é uma classe e deriva de você agir como um componente e tem esses métodos, etc.
‫está declarando o que significa ser essa classe.
‫Portanto, sem essa declaração, o compilador C++ não pode continuar e é por isso que precisamos incluir esse arquivo de
‫cabeçalho.
‫Coisas boas.
‫Espero que agora você entenda um pouco melhor o processo envolvido na compilação de C++ e particularmente
‫na compilação de C++ no Unreal.
‫Vejo você na próxima palestra.