Introdução ao
CMake
Paulo Renato Morais Oliveira
O que é?


Cmake é um sistema utilizado para automatização de
compilação



O objetivo é criar automaticamente os projet...
CMakeLists


Este arquivo é utilizado para informar ao CMake:


Estrutura do projeto;



Localização do código fonte;

...
Projeto Básico


O projeto mais simples pode ser criado com apenas
algumas linhas...


Para uma aplicação

cmake_minimum...
Comandos básicos


As variáveis do CMake são do tipo String e também é suportada uma lista
de Strings

cmake_minimum_requ...
Comandos básicos


Para criar uma lista com todos os arquivos de uma pasta que
correspondam a uma restrição, utilize a fu...
Comandos básicos


Considere a seguinte estrutura de pastas

-src
-kernel
-TeProjection.cpp
-TeProjection.h
-TeDatabase.c...
Comandos básicos


Para adicionar diretórios ao caminho de busca do compilador, utilize
include_directories ( “dir” )

cm...
Comandos básicos


Para imprimir mensagens console do cmake, utilize
message ( STATUS “mensagem” )
message (STATUS “Found...
Comandos básicos


IF
if(expression)
...
elseif(expression2)
...
else(expression)
...
endif(expression)

IF( PostGIS_FOUN...
Comandos básicos


FOR EACH
set(VAR a b c)
foreach(f ${VAR})
message( ${f} )
endforeach(f)
Percorre os valores a, b, c co...
Comandos básicos


Declaração de Funções
function(doSomething arg1 arg2)
...
endfunction(doSomething)
...
doSomething(“ar...
Comandos básicos


Declaração de Macros
macro(doSomething arg1 arg2)
...
endmacro(doSomething)
...
doSomething(“arg1“ “ar...
Comandos básicos


Para disponibilizar uma opção ao usuário, utiliza-se a
função OPTION



option(<option_variable> "hel...
Utilizar bibliotecas externas


Utiliza-se o comando find_package mas é necessário um destes arquivos:


Find<Project>.c...
Link


Para vincular o projeto com bibliotecas externas,
utiliza-se o comando target_link_libraries

target_link_librarie...
Variáveis do Cmake


CMAKE_BUILD_TYPE: Específica o tipo de compilação



CMAKE_MODULE_PATH: Lista de pastas para procur...
Exemplo


Se em alguma das pastas do CMAKE_MODULE_PATH
existir um arquivo chamado FindINTL esta biblioteca
será incluída ...
Próximos SlideShares
Carregando em…5
×

Introdução ao CMake

1.758 visualizações

Publicada em

Uma introdução a criação de projetos utilizando o CMake, http://www.cmake.org/

Publicada em: Tecnologia
  • Seja o primeiro a comentar

Introdução ao CMake

  1. 1. Introdução ao CMake Paulo Renato Morais Oliveira
  2. 2. O que é?  Cmake é um sistema utilizado para automatização de compilação  O objetivo é criar automaticamente os projetos (Solution – Visual Studio, Makefile - Unix, Project – Eclipse), de forma que você não precise criá-los manualmente, ou dar manutenção no projeto.
  3. 3. CMakeLists  Este arquivo é utilizado para informar ao CMake:  Estrutura do projeto;  Localização do código fonte;  Dependências;  Definições necessárias, entre outras coisas.
  4. 4. Projeto Básico  O projeto mais simples pode ser criado com apenas algumas linhas...  Para uma aplicação cmake_minimum_required (VERSION 2.6) project (Tutorial) add_executable(Tutorial tutorial.cpp)  Para uma biblioteca cmake_minimum_required (VERSION 2.6) project (Tutorial) add_library(Tutorial SHARED tutorial.cpp)
  5. 5. Comandos básicos  As variáveis do CMake são do tipo String e também é suportada uma lista de Strings cmake_minimum_required (VERSION 2.6) project (Tutorial) set ( ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) set ( SRC_DIR "${ROOT}/src" ) list ( APPEND DIRS "${ROOT}" "${SRC_DIR}" "${SRC_DIR}/kernel" "${SRC_DIR}/utils" "${SRC_DIR}/functions" ) add_executable(Tutorial tutorial.cpp)
  6. 6. Comandos básicos  Para criar uma lista com todos os arquivos de uma pasta que correspondam a uma restrição, utilize a função file ( GLOB VAR_NAME “DIR/*.restrição” ) cmake_minimum_required (VERSION 2.6) project (Tutorial) set ( ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) set ( SRC_DIR "${ROOT}/src" ) file ( GLOB SRCS ${SRC_DIR}/*.cpp ) file ( GLOB HEADERS ${SRC_DIR}/*.h) add_executable(Tutorial ${SRCS} ${HEADERS})
  7. 7. Comandos básicos  Considere a seguinte estrutura de pastas -src -kernel -TeProjection.cpp -TeProjection.h -TeDatabase.cpp -TeDatabase.h file(GLOB SRCS ${SRC_DIR}/kernel/*.cpp ) Após a execução do comando acima o conteúdo da variável SRCS será uma lista com o caminho dos arquivos: .../src/kernel/TeProjection.cpp .../src/kernel/TeDatabase.cpp
  8. 8. Comandos básicos  Para adicionar diretórios ao caminho de busca do compilador, utilize include_directories ( “dir” ) cmake_minimum_required (VERSION 2.6) project (Tutorial) set ( ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../.." ) set ( SRC_DIR "${ROOT}/src" ) list ( APPEND DIRS "${ROOT}" "${SRC_DIR}" "${SRC_DIR}/kernel" "${SRC_DIR}/utils" "${SRC_DIR}/functions" ) include_directories( ${DIRS} ) add_executable(Tutorial tutorial.cpp)
  9. 9. Comandos básicos  Para imprimir mensagens console do cmake, utilize message ( STATUS “mensagem” ) message (STATUS “Found PostGIS libraries” )
  10. 10. Comandos básicos  IF if(expression) ... elseif(expression2) ... else(expression) ... endif(expression) IF( PostGIS_FOUND ) ... ELSE ( PostGIS_FOUND ) message (STATUS “Found PostGIS libraries” ) ENDIF( PostGIS_FOUND )  A mensagem será exibida se o valor da variável PostGIS_FOUND for empty, 0, N, NO, OFF, FALSE, NOTFOUND ou -NOTFOUND.
  11. 11. Comandos básicos  FOR EACH set(VAR a b c) foreach(f ${VAR}) message( ${f} ) endforeach(f) Percorre os valores a, b, c com a variável f
  12. 12. Comandos básicos  Declaração de Funções function(doSomething arg1 arg2) ... endfunction(doSomething) ... doSomething(“arg1“ “arg2”)  Versão 2.6 ou maior
  13. 13. Comandos básicos  Declaração de Macros macro(doSomething arg1 arg2) ... endmacro(doSomething) ... doSomething(“arg1“ “arg2”)  Funções criam variáveis de escopo local e macros utilizam escopo global
  14. 14. Comandos básicos  Para disponibilizar uma opção ao usuário, utiliza-se a função OPTION  option(<option_variable> "help string describing option” [initial value]) OPTION (TE_PDI_ENABLED "Add Image Processing support?" ON) IF( ${TE_PDI_ENABLED} ) ... ENDIF( ${TE_PDI_ENABLED} )
  15. 15. Utilizar bibliotecas externas  Utiliza-se o comando find_package mas é necessário um destes arquivos:  Find<Project>.cmake na pasta do CMAKE_MODULE_PATH;  <Project>Config.cmake  É possível informar quais componentes são necessários e se a biblioteca é obrigatória.  Após a execução deste comando uma variável terralib_FOUND será configurada. find_package ( terralib REQUIRED COMPONENTS shp spl)
  16. 16. Link  Para vincular o projeto com bibliotecas externas, utiliza-se o comando target_link_libraries target_link_libraries ( ${PROJ_NAME} ${TE_LIBRARIES})
  17. 17. Variáveis do Cmake  CMAKE_BUILD_TYPE: Específica o tipo de compilação  CMAKE_MODULE_PATH: Lista de pastas para procurar por módulos.  Locais onde serão geradas as bibliotecas e executáveis:  CMAKE_LIBRARY_OUTPUT_DIRECTORY  CMAKE_RUNTIME_OUTPUT_DIRECTORY  CMAKE_ARCHIVE_OUTPUT_DIRECTORY
  18. 18. Exemplo  Se em alguma das pastas do CMAKE_MODULE_PATH existir um arquivo chamado FindINTL esta biblioteca será incluída no projeto find_package( INTL) if( INTL_FOUND ) include_directories(${INTL_INCLUDE_DIRS}) list ( APPEND EXTERNAL_LIBS ${INTL_LIBRARIES} ) endif( INTL_FOUND ) ... target_link_libraries ( ${PROJ_NAME} ${EXTERNAL_LIBS})

×