Transcrição do áudio
Bom, é muito comum, então, você, às vezes, precisar de baixar um programa, né? Um programa de computador, e ele é muito complexo, e você quer instalar ele na sua máquina. Qual a vantagem de você baixar um projeto e compilar ele na sua máquina? Sempre que você compila ele na sua máquina, você compila ele para a sua máquina. Então, a compilação é muito redonda para a sua máquina. As bibliotecas que aí tem, o número de processadores que aí tem, a arquitetura que aí tem, tudo que aí tem. Quando eu compilo na minha máquina e distribuo para o mundo, eu faço uma compilação genérica para um Pentium 100, beleza? Que seria a nossa primeira máquina na nossa arquitetura. Ali seria o Pentium 100, que seria o X86. Beleza? Bom, o que que acontece? É uma compilação genérica para múltiplas máquinas. Então, ele tem um desempenho ruim. Então, se eu quero algo de alta performance, eu baixo e executo um make na minha máquina, e aí ele vai, naturalmente, compilar ele na minha máquina. Porém, nem sempre nesses pacotes de instalação, que vem uma centena de arquivos lá dentro, vão vir todas as bibliotecas. Então, às vezes, você vai ter que acertar as bibliotecas com o comando CURL ou com o comando WGET. Você vai ter que fazer download das bibliotecas, instalar as bibliotecas ali, e aí você vai partir para uma luta insana em sites atrás das bibliotecas. Legal? Muito difícil fazer esse tipo de instalação, mas a instalação fica filé. Se você utiliza o projeto NPM, você vai ver que lá no seu Node, ele traz muita coisa em si. E ele compila num tempo de execução lá. Por isso que quando você está com o seu Node na sua máquina, programando, e você manda o diretório NodeModules para o servidor da PAL em algumas coisas, por exemplo, uma biblioteca chamada DA-SYNC da PAL. Legal? Ah, por que isso? Porque foi compilado na sua máquina para a sua máquina, e lá é outra máquina. Lógico. Nem sempre, naturalmente, aquele programa em C compilado, da sua máquina para a sua máquina, vai dar problema em outra máquina. Mas há uma grande chance, como o DA-SYNC do NPM. Ok? Então, para você fazer essa aula, você vai precisar do Makefile. Então você vai ter que dar um comando Make, sobre o arquivo chamado Makefile, com M maiúsculo. O cara que desgraça, o cara que fez isso. O cara que fez isso tinha que apanhar, cara. Filho da puta tinha que apanhar o cara que fez isso. Nós não colocamos... Letras maiúsculas e nomes de arquivos, porra. Tá? A não ser quando você está programando em Java, né? Fazer o quê? Bom, você vai precisar do Build Essential, para você ter o Make ali. Beleza? E você vai precisar do G++ e o GCC, dois compiladores muito importantes aqui. Tá? Basicamente, o Makefile, ele é um arquivo assim, tá? Onde está aqui esse cursor branco, deveria ter um P na frente, tá? Prefix. Mas, sem querer, na hora, um pouco antes de eu bater o Print Screen, eu, ao bater o Print Screen, eu ranquei o P, cara. Que merda, tá? Tem um prefixo ali, tá? Qual é o prefixo? É um caminho. O caminho é o SR local. Beleza? Bom, repara que eu tenho dependências, eu tenho ali o All. All é um comando. Make All. Entendeu? Make Install. Olha lá o Make Install. Make Clean. Entendeu? Make, Dish, Clean. Make, Remove. Make, Purge. Você pode criar, cara. E aí faz o que você tiver que fazer. Então, imagine que eu tenho um projeto gigantesco, uma centena de arquivos, esse Makefile vai ser enorme. Mas, mesmo assim, é melhor dar manutenção nesse Makefile do que eu ficar compilando no terminal um por um das centenas de arquivinhos que vai ter lá, cara. Então, eu começo a colocar. Por exemplo, o primeiro arquivo é o SRC Hello. É uma língua, está escrito em C. Então, eu vou chamar o compilador C. E eu vou passar os flags do CPP, os flags do C. Eu vou passar os parâmetros e eu vou passar aqui a entrada imputada no Make para passar aqui os parâmetros. Repare. Para eu executar o All, eu tenho que executar o SRC Hello, que é esse cara aqui. Ah, peraí. E o Install? É o SRC Hello, ele executa o Hello, depois ele executa o Install. Ah, então é assim que eu coloco as dependências de compilação. Quem depende de quem de compilação? Entenderam a jogada? Então, é assim que eu consigo fazer a compilação de múltiplos arquivos. Simples assim. Lógico, né? Não é tão simples que esse arquivo fica enorme pra caralho isso aí, bicho. Tá? Bom, então eu vou mostrar pra vocês como que você faz aqui, atualmente. Vou dar um zoom aqui, né? Olha só como que você faz aqui um pacote de instalação do Mundo Debian, tá? Eu vou ensinar você a fazer um .deb, um pacote de instalação. Só que você vai programar um programa Hello.c. É um código idiota, tá, cara? É um código, esse código aqui, ó. É um C, não é C++. É um C+++. E ele tá dizendo assim. Olá, visitantes. Visite lá o canal do IAD Online. Valeu. Tá aqui, dentro de src.hello.c. Legal? E repare que eu tenho dentro do diretório do pacote, eu tenho um makefile e um diretório src. Dentro do src, eu tenho um hello. Esse comando que eu usei pra fazer essa imagem é o tree. O tree é um comando opcional do Mundo Debian. Eu acho que ele já tá no Ubuntu. Mas no Debian ele é opcional. Você pode baixar. Sudo apt install tree. E ele instala. Legal? Então repare a estrutura do pacote. Lógico, né? O pacote ainda é um diretório. Mas eu vou transformar esse diretório todinho em um pacote. Legal? Então eu faço isso aqui. No makefile, eu tenho então os parâmetros de compilação. Lembra isso aqui que tem um P, tá, galera? Os parâmetros de compilação. Tá? Seria o makefile. E ali, dentro do... Aqui, esse arquivo hello.c, eu tenho esse código aqui. Beleza? Bom, então, tá aqui, né? O P aqui bonitinho, agora corrigido. Os flags estão todos colocados. Cpp flag entrou. Esse é que é um echo, tá? Você não precisaria dessa linha de echo aqui, que ocupa uma, duas, três linhas. Poderia ser só essa linha aqui de compilação, já mataria. Beleza? All clean, rm. É. Sempre que você vai... Sempre que você vai executar um comando no terminal, tem um tracinho na frente, tá? Tá vendo? Beleza? MKD tem um tracinho na frente, né? Então, aí eu estou explicando a questão dos flags, os flags do C++, os flags do C. Cara, meu, os flags são muito importantes, tá? Por exemplo, só para você ter uma noção, o tamanho do int no C++ não é o mesmo em todos os Linux, em todas as plataformas, cara. É. Baseado no Cppflags, que você tem o tamanho de bits do número inteiro. Então, a noção. Ccc é uma variável que possui o compilador padrão, né? Isso aqui é uma variável, que pode ser um Gcc, pode ser um G++, tá? Então, quando você, então, fez tudo aquilo, preste atenção. Você montou tudo aquilo, fez um makefile, você fez o C++ dentro daquela estrutura. Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Tá? Onde está o arquivo makefile com M maiúsculo? Um minutinho, vou dar uma tosse. Desculpa. Então, você executa o comando make. Quando você executa o comando make, por não passar nenhum parâmetro, ele vai usar o make all. O make all vai compilar tudo o que é ali em C. Por que o make, ele não requer um parâmetro? requer sudo porque você está compilando dentro da sua área de usuário olha aqui a informação que você está na área do usuário tudo dentro do diretório do pacote make, então aqui você pode naturalmente ter acesso então você executa o make sem o sudo por causa disso mas quando você executa o make install tem que ter o sudo porque, vamos voltar lá no nosso arquivo aqui de prefixo o make install ele vai copiar um arquivo chamado hello para dentro do diretório bem do Linux e é uma área reservada e protegida então o make install ele precisa obrigatoriamente ser de sudo por causa dos comandos que ele vai executar aqui dentro do alvo tá, então ele vai gerar esse C aqui um programa no make o make faz esse cara aqui e o make install pega esse cara aqui e joga dentro do barra bin dentro do prefixo beleza e aí o teu programa existe teu programa existe porque agora ele está lá dentro de um caminho que está no path você já sabe o que é o path então repare que eu acabei de mostrar para vocês gente como que você faz um programa simples como que você cria um arquivo simples de compilação como que você estrutura um hot como diretório ainda não é um ponto deb ele vai virar um ponto deb daqui a pouco e como que você executa o make para você gerar os executáveis tudo bonitinho e o make install para você testar beleza próximo vídeo vou falar justamente sobre instalação de baixo nível e aí nós vamos falar de pacotes.deb bom provavelmente você terá que transformar esse diretório num pacote.deb até lá até mais tchau