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.txtprincipal 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/buildSe 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 buildSe 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_graphVocê 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