O CMake, desenvolvido pela Kitware, é um sistema de controle de compilação, multi-plataforma e código-aberto. O CMake oferece uma alternativa mais fácil e produtiva as “auto-tools (autoconf, automake, autoheader). Além disso, é interessante notar que o CMake foi escolhido como a ferramenta de build oficial para a nova versão do projeto KDE. Este é o primeiro de uma série de artigos detalhando desde as opções mais básicas até as mais avançadas do CMake.
INICIANDO NO CMAKE
A configuração básica do CMake gera em torno do arquivo CMakeLists.txt, através do qual é possível definir detalhes do projeto. Por exemplo:
– arquivos do projeto
– bibliotecas a serem linkadas
– opções de configuração para o projeto
– instalação de arquivos
Como exemplo da utilização do CMake vamos gerar um aplicativo “hello world” e gerenciar a sua compilação através do CMake.
[cpp]
#include
using std::cout;
using std::endl;
int main(void) {
cout << "Hello Cmake!" << endl;
return 0;
}
[/cpp]
Manualmente poderiamos compilar esse aplicativo utilizando o g++, no Linux, da seguinte maneira:
[code]
g++ -c hello.cpp
g++ -o hello hello.o
[/code]
Isto nos criaria o executável "hello".
PORTANDO O HELLO CMAKE PARA O CMAKE
O mesmo projeto, gerenciado pelo CMake, ficaria da seguinte forma:
[code]
##### HELLO CMAKE
PROJECT(hello_cmake)
ADD_EXECUTABLE(
hello
hello.cpp
)
[/code]
O comando PROJECT é utilizado pelo CMake para identificar o nome do projeto e, opcionalmente, a linguagem de programação utilizada.
O comando ADD_EXECUTABLE é utilizado para adicionar um executável ao projeto. Neste comando é informado, primeiramente, o nome do executável e os arquivos de código-fonte que são necessários para gera-lo. No exemplo acima temos “hello” como o executável e hello.cpp como o código-fonte do projeto.
Uma vez editado este arquivo, já é possível gerar os makefiles necessários compilar o projeto. Para isso é necessário executar o seguinte comando:
[code]
$ cmake .
[/code]
Tanto o arquivo CMakeLists.txt quanto o comando acima pressupõem que todos os arquivos encontram-se em um único diretório. Note o ponto como parâmetro para o CMake, o que identifica para o cmake que o arquivo CMakeLists.txt está no mesmo diretório aonde executamos o comando. Uma vez que este comando tenha sido executado com sucesso, a saida do comando deverá ser semelhante a esta:
[code]
$ cmake .
— Check for working C compiler: gcc
— Check for working C compiler: gcc — works
— Check for working CXX compiler: c++
— Check for working CXX compiler: c++ — works
— Configuring done
— Generating done
— Build files have been written to: /home/otavio/testes_de_codigos/hello_cmake
[/code]
A partir deste momento, o projeto está pronto para ser compilado através do make:
[code]
$ make
cmake.depends is up-to-date
Building object file hello.o…
Building executable /home/otavio/testes_de_codigos/hello_cmake/hello…
[/code]
Ao final do processo deverá existir, neste diretório, um arquivo executável “hello”. É possível, também, limpar o diretório dos arquivos gerados, neste caso utilizando o comando “make clean”, o qual não deverá gerar qualquer saída.
Através desta introdução, acredito, foi possível mostrar o funcionamento básico do CMake através do clássico exemplo “Hello World”. Em breve mostrarei como utilizar bibliotecas, opções de compilação, variáveis, etc através do CMake, tornando possível sua utilização em projetos de maior porte.