Desenvolvimento &Tecnologia 01 Sep 2006 11:20 am

CMake – Parte 2: interface curses

No último artigo sobre o CMake, apresentei algumas das funcionalidades básicas dele e o funcionamento básico. No artigo de hoje mostrarei a interface curses e suas variáveis.

INTERFACE NCURSES

No linux, o CMake conta com uma interface NCurses aonde o desenvolvedor pode editar as opções de compilação, linkedição e instalação do aplicativo. Esta interface em curses pode ser carregada usando o seguinte comando:

[code]ccmake .[/code]

Este comando irá apresentar a uma tela simples, mostrada na figura abaixo. Neste ponto o CMake ainda não executou a pré-configuração do projeto. Esta pré-configuração pode ser feita pressionando a tecla ‘c’.

ccmake1

Uma vez executada esta pré-configuração do projeto, outras opções irão aparecer novamente em uma tela simplificada. Através da tecla ‘t’ pode-se alternar entre o modo simplificado e o modo avançado, cuja tela é mostrada abaixo:

ccmake2
Nesta tela é possível identificar uma série de variáveis que podem ser configuradas para o projeto. As variáveis mais relevantes são:

CMAKE_BUILD_TYPE
: identifica o tipo de build atualmente utilizado no projeto. O CMake vem com os seguintes valores pré-configurados: Debug, MinSizeRel (compilação otimizada para tamanho), Release, RelWithDebInfo (release com informações de depuração).
CMAKE_CXX_COMPILER: configura o compilador utilizado.
CMAKE_CXX_FLAGS: configura as flags de compilação para aplicativos C++.
CMAKE_CXX_FLAGS_DEBUG: configura as flags de compilação compilação em modo debug (CMAKE_BUILD_TYPE = Debug).
CMAKE_CXX_FLAGS_MINSIZEREL: configura as flags de compilação compilação em modo otimizado para tamanho (CMAKE_BUILD_TYPE = MinSizeRel).
CMAKE_CXX_FLAGS_RELEASE: configura as flags de compilação compilação em modo release (CMAKE_BUILD_TYPE = Release).
CMAKE_CXX_FLAGS_RELWITHDEBINFO: configura as flags de compilação compilação em release com informações depuração (CMAKE_BUILD_TYPE = RelWithDebInfo).

CMAKE_C_FLAGS
: configura as flags de compilação para aplicativos em C.
As variáveis CMAKE_C_FLAGS_DEBUG, CMAKE_C_FLAGS_MINSIZEREL, CMAKE_C_FLAGS_RELEASE e CMAKE_C_FLAGS_RELWITHDEBINFO configuram para cada um dos diferentes tipos de compilação disponíveis.

CMAKE_EXE_LINKER_FLAGS: configura as flags utilizadas pelo linker na geração do executável. As variáveis CMAKE_EXE_LINKER_FLAGS_DEBUG, CMAKE_EXE_LINKER_FLAGS_MINSIZEREL, CMAKE_EXE_LINKER_FLAGS_RELEASE e CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO configuram para cada um dos diferentes tipos de compilação disponíveis.

CMAKE_SHARED_LINKER_FLAGS: configura as flags utilizadas pelo linker na geração do executável. As variáveis CMAKE_EXE_LINKER_FLAGS_DEBUG, CMAKE_EXE_LINKER_FLAGS_MINSIZEREL, CMAKE_EXE_LINKER_FLAGS_RELEASE, e CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO configuram para cada um dos diferentes tipos de compilação disponíveis.

CMAKE_VERBOSE_MAKEFILE: alterna entre o modo silencioso e não-silencioso do make.

Um detalhe que deve ser levado em conta é que as variáveis setadas através desta interface ficarão armazenadas em um cache utilizado pelo CMake, deste modo será necessário setar as variáveis novamente é toda vez que o projeto for configurado em um outro micro ou o cache for apagado. Mais adiante, nesta série de tutoriais, será mostrado como resolver este problema.
Esta interface pode receber, também, variáveis definidas pelo usuário. Assim possibilitando personalizar ainda mais as rotinas de compilação.
Após editadas as variáveis desejadas, basta pressionar ‘c’ atualizar o cache e, então, ‘g’ gerar os Makefiles e sair do aplicativo.

EDITANDO INFORMAÇÕES DE COMPILAÇÃO “POR TRÁS DOS PANOS”

Quase sempre existirão detalhes de compilação, como pré-definições, macros, variáveis de ambiente, etc que não serão saudáveis deixar a mostra na interface. Esses detalhes invisíveis podem ser configurados diretamente no arquivo CMakeLists.txt.

SETANDO PRÉ-DEFINIÇÕES

Para setar definições o CMake oferece a função ADD_DEFINITIONS(). Essa função funciona da seguinte maneira:

[code]ADD_DEFINITIONS(NOME1 NOME2 .. NOMEx)[/code]

Aonde NOME1 é uma flag e valor de definição válidas no seu compilador. Deste modo, para pré-definir _REENTRANT E _ISOC99_SOURCE usuários do gcc usariam a função da seguinte maneira:

[code]ADD_DEFINITIONS(
-D_REENTRANT
-D_ISOC99_SOURCE
)[/code]

Obs.: as quebras de linha são apenas para melhorar a legibilidade da função, ficando a cargo do desenvolvedor escolher a maneira como acha mais legível. Editado o arquivo, basta re-configurar o projeto para a modificação ter efeito.

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply

You must be logged in to post a comment.