Pular para conteúdo

Aula 15 - Build e CMake 🛠️


O Problema da Escala

  • Um arquivo .cpp é fácil de compilar.
  • Como gerenciar 1.000 arquivos, bibliotecas e sistemas diferentes?

Compilação Separada

  • Cada .cpp gera um arquivo .o (objeto).
  • O Linker junta tudo no final.

Arquivos de Cabeçalho (.h / .hpp)

  • Contêm a "promessa" do que a função faz.
  • Permitem que diferentes arquivos se comuniquem sem saber a implementação completa.

Include Guards (#pragma once)

  • Evitam que o compilador leia o mesmo header duas vezes (erro de redefinição).

O que é o CMake?

  • Um gerador de sistemas de build.
  • Ele não compila; ele cria os arquivos (Makefiles, projetos VS) para quem compila.

Vantagens do CMake

  • Multiplataforma (Windows/Linux/Mac).
  • Padrão de mercado.
  • Gerencia dependências externas de forma simples.

CMakeLists.txt: O Mestre

cmake_minimum_required(VERSION 3.10)
project(MeuProjeto)

add_executable(app main.cpp utils.cpp)

Organização de Pastas Profissional

  • /src: Código-fonte (.cpp).
  • /include: Cabeçalhos (.h).
  • /build: Onde a "sujeira" (arquivos gerados) fica.

Construindo o Projeto (Build Out-of-Source)

mkdir build
cd build
cmake ..
cmake --build .

Target-Based CMake

  • O C++ Moderno foca em Targets.
  • target_include_directories(app PRIVATE include)

Compilando no Windows vs Linux

  • Windows usa \ e Linux usa / (CMake resolve isso!).
  • Diferenças de extensões (.exe vs sem extensão).

Flags do Compilador

  • -Wall: Todos os avisos.
  • -O3: Otimização máxima.
  • -std=c++20: Define a versão da linguagem.

Bibliotecas Estáticas (.lib / .a)

  • O código é embutido dentro do seu executável.

Bibliotecas Dinâmicas (.dll / .so)

  • O código é carregado apenas quando o programa roda.

Encontrando Bibliotecas Externas

  • find_package(TBB REQUIRED)

Macros e Definições (#define)

  • Permitem mudar o comportamento do código conforme o sistema operacional.

Code Linting e Formatação

  • Clang-Format: Para manter o estilo do código.
  • Clang-Tidy: Para encontrar erros de lógica e estilo.

Sistemas de Controle de Versão (Git)

  • O que colocar no .gitignore?
  • Nunca coloque a pasta build/ ou arquivos binários!

Automação de Testes

  • enable_testing()
  • add_test(NAME Teste1 COMMAND app)

Resumo da Aula

  • Organize seu projeto desde o dia 1.
  • Aprenda o básico de CMake: é a linguagem do C++.
  • Separe headers de implementações.

Fim da Aula 15

  • Próxima aula: Projeto Final e Carreira!