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.
- 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!