SlideShare une entreprise Scribd logo
1  sur  18
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 projetos
(Solution – Visual Studio, Makefile - Unix, Project –
Eclipse), de forma que você não precise criá-los
manualmente, ou dar manutenção no projeto.
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.
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)
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)
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})
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
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)
Comandos básicos


Para imprimir mensagens console do cmake, utilize
message ( STATUS “mensagem” )
message (STATUS “Found PostGIS libraries” )
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.
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
Comandos básicos


Declaração de Funções
function(doSomething arg1 arg2)
...
endfunction(doSomething)
...
doSomething(“arg1“ “arg2”)



Versão 2.6 ou maior
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
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} )
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)
Link


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

target_link_libraries ( ${PROJ_NAME} ${TE_LIBRARIES})
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
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})

Contenu connexe

Tendances

Amigo se escribe con H, Maria Fernanda Heredia
Amigo se escribe con H, Maria Fernanda HerediaAmigo se escribe con H, Maria Fernanda Heredia
Amigo se escribe con H, Maria Fernanda HerediaFlorinda Castillo López
 
Lição 7 - O Ministério da Igreja - 18fev2024.pptx
Lição 7 - O Ministério da Igreja - 18fev2024.pptxLição 7 - O Ministério da Igreja - 18fev2024.pptx
Lição 7 - O Ministério da Igreja - 18fev2024.pptxCelso Napoleon
 
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptx
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptxSlides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptx
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptxLuizHenriquedeAlmeid6
 
Aria, from Fred Hersch Songs Without Words
Aria, from Fred Hersch Songs Without WordsAria, from Fred Hersch Songs Without Words
Aria, from Fred Hersch Songs Without WordsJohn Turville
 
Muerte y sepultura de Moisés
Muerte y sepultura de MoisésMuerte y sepultura de Moisés
Muerte y sepultura de MoisésYanet Caldas
 
Casamento entre os fulas
Casamento entre os fulasCasamento entre os fulas
Casamento entre os fulasCantacunda
 
Asterix and Cleopatra
Asterix and CleopatraAsterix and Cleopatra
Asterix and CleopatraLUIS NARBONA
 
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptx
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptxSlide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptx
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptxTiago Silva
 
القرار رقم 150بشان منح مكافاة الامتحانات
القرار رقم 150بشان منح مكافاة الامتحاناتالقرار رقم 150بشان منح مكافاة الامتحانات
القرار رقم 150بشان منح مكافاة الامتحاناتElsayed Aboulila
 
Silniki cieplne
Silniki cieplneSilniki cieplne
Silniki cieplneHamidlo94
 
Lição 8 - Transgênero - Que Transrealidade é Essa.pptx
Lição 8 - Transgênero - Que Transrealidade é Essa.pptxLição 8 - Transgênero - Que Transrealidade é Essa.pptx
Lição 8 - Transgênero - Que Transrealidade é Essa.pptxCelso Napoleon
 
καστράτο παρενοχλήσεις
καστράτο   παρενοχλήσειςκαστράτο   παρενοχλήσεις
καστράτο παρενοχλήσειςpinnokio.gr
 

Tendances (20)

Amigo se escribe con H, Maria Fernanda Heredia
Amigo se escribe con H, Maria Fernanda HerediaAmigo se escribe con H, Maria Fernanda Heredia
Amigo se escribe con H, Maria Fernanda Heredia
 
Lição 7 - O Ministério da Igreja - 18fev2024.pptx
Lição 7 - O Ministério da Igreja - 18fev2024.pptxLição 7 - O Ministério da Igreja - 18fev2024.pptx
Lição 7 - O Ministério da Igreja - 18fev2024.pptx
 
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptx
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptxSlides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptx
Slides Lição 9, CPAD, O Batismo – A Primeira Ordenança da Igreja, 1Tr24.pptx
 
Aria, from Fred Hersch Songs Without Words
Aria, from Fred Hersch Songs Without WordsAria, from Fred Hersch Songs Without Words
Aria, from Fred Hersch Songs Without Words
 
Muerte y sepultura de Moisés
Muerte y sepultura de MoisésMuerte y sepultura de Moisés
Muerte y sepultura de Moisés
 
Slides Lição 4, Betel, A alienação humana a partir da Queda, 2Tr23, Pr Henriq...
Slides Lição 4, Betel, A alienação humana a partir da Queda, 2Tr23, Pr Henriq...Slides Lição 4, Betel, A alienação humana a partir da Queda, 2Tr23, Pr Henriq...
Slides Lição 4, Betel, A alienação humana a partir da Queda, 2Tr23, Pr Henriq...
 
Slides Licao 5, CPAD, O Avivamento na Vida da Igreja, 1Tr23, Pr Henrique.pptx
Slides Licao 5, CPAD, O Avivamento na Vida da Igreja, 1Tr23, Pr Henrique.pptxSlides Licao 5, CPAD, O Avivamento na Vida da Igreja, 1Tr23, Pr Henrique.pptx
Slides Licao 5, CPAD, O Avivamento na Vida da Igreja, 1Tr23, Pr Henrique.pptx
 
Meu amigo down em casa[1]
Meu amigo down em casa[1]Meu amigo down em casa[1]
Meu amigo down em casa[1]
 
Slides Lição 2, CPAD, A Predileção dos Pais por um dos Filhos.pptx
Slides Lição 2, CPAD, A Predileção dos Pais por um dos Filhos.pptxSlides Lição 2, CPAD, A Predileção dos Pais por um dos Filhos.pptx
Slides Lição 2, CPAD, A Predileção dos Pais por um dos Filhos.pptx
 
Casamento entre os fulas
Casamento entre os fulasCasamento entre os fulas
Casamento entre os fulas
 
Asterix and Cleopatra
Asterix and CleopatraAsterix and Cleopatra
Asterix and Cleopatra
 
SLIDES Licao 4, Resguardando-se de Sentimentos Ruins, 2Tr22, Pr Henrique, EBD...
SLIDES Licao 4, Resguardando-se de Sentimentos Ruins, 2Tr22, Pr Henrique, EBD...SLIDES Licao 4, Resguardando-se de Sentimentos Ruins, 2Tr22, Pr Henrique, EBD...
SLIDES Licao 4, Resguardando-se de Sentimentos Ruins, 2Tr22, Pr Henrique, EBD...
 
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptx
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptxSlide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptx
Slide Licao 7 - 2T - 2023 - CPAD ADULTOS - Retangular.pptx
 
القرار رقم 150بشان منح مكافاة الامتحانات
القرار رقم 150بشان منح مكافاة الامتحاناتالقرار رقم 150بشان منح مكافاة الامتحانات
القرار رقم 150بشان منح مكافاة الامتحانات
 
Slides Lição 2, CG, Moisés, um Líder Fiel à sua Casa, 2Tr23, Pr Henrique, EBD...
Slides Lição 2, CG, Moisés, um Líder Fiel à sua Casa, 2Tr23, Pr Henrique, EBD...Slides Lição 2, CG, Moisés, um Líder Fiel à sua Casa, 2Tr23, Pr Henrique, EBD...
Slides Lição 2, CG, Moisés, um Líder Fiel à sua Casa, 2Tr23, Pr Henrique, EBD...
 
Slides Licao 3, As Abominacoes Do Templo.pptx
Slides Licao 3, As Abominacoes Do Templo.pptxSlides Licao 3, As Abominacoes Do Templo.pptx
Slides Licao 3, As Abominacoes Do Templo.pptx
 
Silniki cieplne
Silniki cieplneSilniki cieplne
Silniki cieplne
 
Lição 8 - Transgênero - Que Transrealidade é Essa.pptx
Lição 8 - Transgênero - Que Transrealidade é Essa.pptxLição 8 - Transgênero - Que Transrealidade é Essa.pptx
Lição 8 - Transgênero - Que Transrealidade é Essa.pptx
 
καστράτο παρενοχλήσεις
καστράτο   παρενοχλήσειςκαστράτο   παρενοχλήσεις
καστράτο παρενοχλήσεις
 
SlideShare Lição 12, A Bondade de DEUS em nos Atender, 2Tr22, Pr Henrique, EB...
SlideShare Lição 12, A Bondade de DEUS em nos Atender, 2Tr22, Pr Henrique, EB...SlideShare Lição 12, A Bondade de DEUS em nos Atender, 2Tr22, Pr Henrique, EB...
SlideShare Lição 12, A Bondade de DEUS em nos Atender, 2Tr22, Pr Henrique, EB...
 

Similaire à Introdução ao CMake

Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECLW3P Projetos Web
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9Nando Vieira
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rustBruno Rocha
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaDeivid Martins
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Giovanni Bassi
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)Felipe Meganha
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02profwtelles
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)Fabrício Catae
 

Similaire à Introdução ao CMake (20)

Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Desenvolvendo Extensões PECL
Desenvolvendo Extensões PECLDesenvolvendo Extensões PECL
Desenvolvendo Extensões PECL
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
O que mudou no Ruby 1.9
O que mudou no Ruby 1.9O que mudou no Ruby 1.9
O que mudou no Ruby 1.9
 
Apostila de-vb-net
Apostila de-vb-netApostila de-vb-net
Apostila de-vb-net
 
Escrevendo modulos python com rust
Escrevendo modulos python com rustEscrevendo modulos python com rust
Escrevendo modulos python com rust
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Mini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e DistribuídaMini-curso Programação Paralela e Distribuída
Mini-curso Programação Paralela e Distribuída
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Ud2
Ud2Ud2
Ud2
 
Linux shell
Linux shellLinux shell
Linux shell
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6
 
Prova qco-2008.informática
Prova qco-2008.informáticaProva qco-2008.informática
Prova qco-2008.informática
 
Matlab – curso básico (1)
Matlab – curso básico (1)Matlab – curso básico (1)
Matlab – curso básico (1)
 
Linguagem c wellington telles - aula 02
Linguagem c   wellington telles - aula 02Linguagem c   wellington telles - aula 02
Linguagem c wellington telles - aula 02
 
Curso de java 02
Curso de java 02Curso de java 02
Curso de java 02
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
 
Basico dovba excel_tutorial1
Basico dovba excel_tutorial1Basico dovba excel_tutorial1
Basico dovba excel_tutorial1
 

Dernier

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfNatalia Granato
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Dernier (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Introdução ao CMake

  • 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. 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. 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. 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. 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. 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. 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. Comandos básicos  Para imprimir mensagens console do cmake, utilize message ( STATUS “mensagem” ) message (STATUS “Found PostGIS libraries” )
  • 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. 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. Comandos básicos  Declaração de Funções function(doSomething arg1 arg2) ... endfunction(doSomething) ... doSomething(“arg1“ “arg2”)  Versão 2.6 ou maior
  • 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. 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. 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. Link  Para vincular o projeto com bibliotecas externas, utiliza-se o comando target_link_libraries target_link_libraries ( ${PROJ_NAME} ${TE_LIBRARIES})
  • 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. 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})