📊 Capítulo 19: C++20 Modules & Modern CMake
Especialização em Sistemas com C++
🗺️ O Fim do #include: Arquivos de Cabeçalho vs Módulos do C++20
flowchart TD
subgraph LEGACY ["O Pesadelo do #include (50 Anos de Dívida Técnica)"]
H1["Arquivo .cpp inclui 50 headers .hpp"]
--> H2["O pré-processador copia e cola milhões de linhas de texto cru repetidamente!"]
--> H3["Tempo de compilação: Minutos ou HORAS! Vazamento de macros polui tudo! 🚨"]
end
subgraph MODULES ["Módulos C++20 (import / export)"]
M1["export module matematica;"]
--> M2["Compilado UMA ÚNICA VEZ em interface binária de módulo (.ifc / .pcm)"]
--> M3["import matematica; (Carregamento instantâneo / Zero vazamento de macros!) ⚡"]
end
LEGACY -.-> |"C++20"| MODULES
style LEGACY fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style MODULES fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Definindo um Módulo C++20
// matematica.cppm
export module matematica;
export int somar(int a, int b) {
return a + b;
}
- Consumo em outro arquivo:
// main.cpp import matematica; import std; // C++23: importa toda a biblioteca padrão em milissegundos!
🎯 Slide 2: Modern CMake Baseado em Alvos (Targets)
-
Regra de Ouro: Abandone comandos globais (
include_directories,add_definitions). - Use comandos orientados a alvos:
target_link_libraries(MeuApp PRIVATE fmt::fmt)target_compile_features(MeuApp PUBLIC cxx_std_20)target_include_directories(MeuApp PUBLIC include)
🎯 Slide 3: Gerenciamento de Dependências com FetchContent e vcpkg
- Integração simplificada de bibliotecas de terceiros como Catch2, nlohmann_json e Asio diretamente no script
CMakeLists.txtsem dores de cabeça!
🔗 Navegação do Capítulo 19
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim