Skip to content
Latchkey

O que é o CMake? O sistema de build multiplataforma explicado

O CMake é um gerador de sistema de build multiplataforma para C e C++ que descreve um build uma vez e produz arquivos de build nativos para muitas plataformas e compiladores.

Projetos em C e C++ precisam ser construídos em muitos compiladores e sistemas operacionais. O CMake resolve isso permitindo que você descreva o build de forma abstrata em CMakeLists.txt e então gere os arquivos de build nativos (Makefiles, Ninja, projetos do Visual Studio) para qualquer toolchain que você tenha como alvo.

O que é o CMake

O CMake é um meta build system: em vez de construir diretamente, ele gera arquivos de build para um backend escolhido (Unix Makefiles, Ninja, MSVC, Xcode). Você descreve targets, sources, dependências e opções em CMakeLists.txt, e o CMake produz um build que funciona com as ferramentas nativas da plataforma.

Configure e build

Um build do CMake tem duas fases. O passo de configure lê o CMakeLists.txt, detecta o compilador e as dependências e gera arquivos de build em um diretório de build. O passo de build então executa o backend escolhido para compilar. Separar a configuração do build mantém as árvores de código-fonte limpas e suporta builds out-of-source.

Um exemplo de uso

Configure em um diretório de build e depois faça o build dele.

Common CMake commands
# configure (generate build files)
cmake -S . -B build

# build using the generated files
cmake --build build

Papel em CI/CD

Em CI, o CMake configura e constrói projetos C/C++ de forma consistente na plataforma e no compilador do runner, e então frequentemente executa testes via CTest. Fazer cache do diretório de build e dos objetos compilados (e usar ccache) entre execuções evita recompilar código inalterado. Builds C/C++ são pesados de CPU, então executá-los em runners gerenciados mais rápidos com caches quentes e auto-retry em downloads instáveis reduz o tempo de CI.

Alternativas

O Meson é um gerador de sistema de build mais novo e simples que vem ganhando popularidade. O Bazel lida com grandes monorepos C/C++ poliglotas com cache forte. O Make puro funciona para projetos pequenos. O CMake é o padrão de fato para builds portáveis de C e C++.

Principais conclusões

  • O CMake gera arquivos de build nativos para muitos compiladores e plataformas.
  • Ele separa um passo de configure do passo de build propriamente dito.
  • Em CI, faça cache do diretório de build e use ccache para acelerar builds C/C++.

Guias relacionados