Compilando um projeto
Agora que definimos todas as configurações do projeto, podemos compilar o código. Internamente, o CMake irá gerar uma série arquivos auxiliares que definem as instruções para compilar o projeto.
Esses arquivos são específicos para cada ambiente de desenvolvimento e contêm instruções para compilar, vincular e executar o código diferentemente, de acordo com o sistema operacional e compilador utilizados. Podemos dizer que propósito principal do CMake é justamente generalizar o processo de compilação, gerando arquivos de configuração específicos para diferentes ambientes.
Esses arquivos auxiliares são muitos e podem poluir o diretório do projeto. Para que eles não nos atrapalhem, é comum criar uma pasta chamada build
e configurar o CMake para gerar os arquivos de compilação lá.
Assim, se ocorrer algum erro durante a compilação, é possível simplesmente deletar a pasta build
e gerar os arquivos novamente!
Além disso, podemos criar o arquivo .gitignore
e incluir essa pasta, de forma que o Git não envie os arquivos de compilação para o repositório remoto.
Configurações
Seção intitulada “Configurações”Vamos utilizar dois comandos para compilar o projeto.
O primeiro é responsável por ler os arquivos CMakeLists.txt
que escrevemos, criar a pasta build
e gerar os arquivos de configuração necessários dentro dela.
Este comando tem a seguinte estrutura.
cmake
: comando para executar o CMake;-S .
: indica que o arquivoCMakeLists.txt
principal está na pasta atual, que é representada pelo ponto final (.
); e-B build
: indica que os arquivos de configuração devem ser gerados na pastabuild
.-G Ninja
: indica que o Ninja deve ser utilizado como gerador de arquivos de configuração;-DCMAKE_C_COMPILER=clang
: indica que o Clang deve ser utilizado como compilador C;-DCMAKE_CXX_COMPILER=clang++
: indica que o Clang++ deve ser utilizado como compilador C++.
Portanto, execute na raiz do projeto oriented_graph_with_cmake os seguintes comandos. O resultado deve ser semelhante ao disposto abaixo.
cd ~/dev/c_cpp_projects/oriented_graph_with_cmakecmake -S . -B build -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++# - The CXX compiler identification is Clang 18.1.3# -- Detecting CXX compiler ABI info# -- Detecting CXX compiler ABI info - done# -- Check for working CXX compiler: /usr/bin/clang++ - skipped# -- Detecting CXX compile features# -- Detecting CXX compile features - done# -- Configuring done (0.3s)# -- Generating done (0.0s)# CMake Warning:# Manually-specified variables were not used by the project:
# CMAKE_C_COMPILER
# -- Build files have been written to: /home/gabriel/dev/c_cpp_projects/oriented_graph_with_cmake/build
Se você observar a pasta build
, verá que ela foi populada com arquivos de configuração gerados pelo CMake.
Caso você não mude a estrutura de dependências do projeto, não é necessário rodar o comando de configuração novamente.
Quando você alterar as dependências, delete a pasta build
e rode o comando.
Compilação
Seção intitulada “Compilação”O segundo comando é responsável por de fato compilar o projeto. Ele tem a seguinte estrutura:
cmake
: comando para executar o CMake;--build
: indica que o CMake deve compilar o projeto; ebuild
: indica a pasta em que os arquivos de configuração foram gerados.
Portanto, execute o seguinte comando na raiz do projeto oriented_graph_with_cmake
.
cd ~/dev/c_cpp_projects/oriented_graph_with_cmakecmake --build build
Se tudo correr bem, você não verá nenhum erro, e a última linha de saída será como a seguinte.
[16/16] Linking CXX executable src/oriented_graph
Você verá que um arquivo oriented_graph
foi gerado na pasta build/src
.
Para executar o programa, basta chamá-lo.
cd ~/dev/c_cpp_projects/oriented_graph_with_cmake./build/src/oriented_graph# 1 3 4 5 2