2
Mais lidos
4
Mais lidos
5
Mais lidos
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})

Mais conteúdo relacionado

DOC
Bài tập Andehit
PDF
Đề thi + Đáp án vào lớp 10 môn Toán tỉnh Bắc Giang năm 2015
DOC
Đề thi HSG Toán 9 Bình Định năm 2016 - 2017
PDF
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 10 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
PDF
Dap an va huong dan giai de thi dh 2011.numberone
PPTX
Dealer Absorption Ratio
PDF
GIÁO ÁN AN NINH QUỐC PHÒNG 11 - KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
PDF
Comunicação Serial Linux
Bài tập Andehit
Đề thi + Đáp án vào lớp 10 môn Toán tỉnh Bắc Giang năm 2015
Đề thi HSG Toán 9 Bình Định năm 2016 - 2017
BIÊN SOẠN BỘ ĐỀ CUỐI HỌC KÌ 1 MÔN TOÁN 10 CÁNH DIỀU - NĂM 2024 (BẢN HS + GV) ...
Dap an va huong dan giai de thi dh 2011.numberone
Dealer Absorption Ratio
GIÁO ÁN AN NINH QUỐC PHÒNG 11 - KẾT NỐI TRI THỨC - CẢ NĂM THEO CÔNG VĂN 5512 ...
Comunicação Serial Linux

Semelhante a Introdução ao CMake (20)

PDF
Shell script
DOC
Apostila Treinamento AvançAdo Em Linux
DOC
Apostila Treinamento AvançAdo Em Linux
DOC
Apostila Treinamento AvançAdo Em Linux
PPTX
Introduction to linux
PDF
Apostila comandos unix
PDF
Comandos Unix
PPTX
Comandos Básicos do Linux.pptx
PDF
Enviando linux
PDF
Linux
PDF
Linux basico
PDF
Linux cursos
PDF
Linux basico
PDF
Apostila linux francisco-araruna
PPTX
Guia Rapido - Linux
PDF
X dialog
PDF
O mundo-da-linguagem-c
PDF
O fantc3a1stico-mundo-da-linguagem-c
PDF
O_Fantastico_Mundo_da_Linguagem_C em pdf.pdf
PDF
(03) shell e comandos basicos[1]
Shell script
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
Introduction to linux
Apostila comandos unix
Comandos Unix
Comandos Básicos do Linux.pptx
Enviando linux
Linux
Linux basico
Linux cursos
Linux basico
Apostila linux francisco-araruna
Guia Rapido - Linux
X dialog
O mundo-da-linguagem-c
O fantc3a1stico-mundo-da-linguagem-c
O_Fantastico_Mundo_da_Linguagem_C em pdf.pdf
(03) shell e comandos basicos[1]
Anúncio

Último (12)

PDF
Manejo integrado de pragas na cultura do algodão
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Analise Estatica de Compiladores para criar uma nova LP
PDF
Jira Software projetos completos com scrum
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PPT
Conceitos básicos de Redes Neurais Artificiais
PPTX
Utilizando code blockes por andre backes
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Processos no SAP Extended Warehouse Management, EWM100 Col26
PPTX
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Tipos de servidor em redes de computador.pptx
Manejo integrado de pragas na cultura do algodão
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Analise Estatica de Compiladores para criar uma nova LP
Jira Software projetos completos com scrum
Viasol Energia Solar -Soluções para geração e economia de energia
Conceitos básicos de Redes Neurais Artificiais
Utilizando code blockes por andre backes
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Processos no SAP Extended Warehouse Management, EWM100 Col26
Aula 9 - Funções em Python (Introdução à Ciência da Computação)
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Tipos de servidor em redes de computador.pptx
Anúncio

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})