Livro de receitas CMake
Este repositório coleta fontes das receitas contidas no CMake Cookbook publicado pela Packt e de autoria de Radovan Bast e Roberto Di Remigio
Índice
Capítulo 1: De um Executável Simples a Bibliotecas
- 1. Compilando um único arquivo fonte em um executável
- 2. Troca de geradores
- 3. Construindo e vinculando bibliotecas estáticas e compartilhadas
- 4. Controlando a compilação com condicionais
- 5. Apresentando opções ao usuário
- 6. Especificando o compilador
- 7. Mudando o tipo de construção
- 8. Controlando sinalizadores do compilador
- 9. Definindo o padrão para o idioma
- 10. Usando construções de fluxo de controle
Capítulo 2: Detectando o Meio Ambiente
- 1. Descobrindo o sistema operacional
- 2. Lidando com código-fonte dependente de plataforma
- 3. Lidando com código-fonte dependente do compilador
- 4. Descobrindo a arquitetura do processador host
- 5. Descobrindo o conjunto de instruções do processador host
- 6. Habilitando vetorização para a biblioteca Eigen
Capítulo 3: Detectando Bibliotecas e Programas Externos
- 1. Detectando o interpretador Python
- 2. Detectando a biblioteca Python
- 3. Detectando módulos e pacotes Python
- 4. Detectando as bibliotecas matemáticas BLAS e LAPACK
- 5. Detectando o ambiente paralelo OpenMP
- 6. Detectando o ambiente paralelo MPI
- 7. Detectando a biblioteca Eigen
- 8. Detectando as bibliotecas Boost
- 9. Detectando bibliotecas externas: I. Usando
pkg-config
- 10. Detecção de bibliotecas externas: II. Escrevendo um módulo find
Capítulo 4: Criação e execução de testes
- 1. Criando um teste de unidade simples
- 2. Definindo um teste de unidade usando a biblioteca Catch2
- 3. Definindo um teste de unidade e vinculando-o ao Google Test
- 4. Definindo um teste de unidade e vinculando-o ao teste Boost
- 5. Usando análise dinâmica para detectar defeitos de memória
- 6. Testando falhas esperadas
- 7. Usando tempos limite para testes longos
- 8. Executando testes em paralelo
- 9. Executando um subconjunto de testes
- 10. Usando acessórios de teste
Capítulo 5: Operações em tempo de configuração e tempo de construção
- 1. Usando operações de arquivo independentes de plataforma
- 2. Executando um comando personalizado no momento da configuração
- 3. Executando um comando personalizado em tempo de construção: I. Usando
add_custom_command
- 4. Executando um comando personalizado em tempo de construção: II. Usando
add_custom_target
- 5. Executando comandos personalizados para alvos específicos em tempo de construção
- 6. Compilação e vinculação de sondagem
- 7. Testando sinalizadores do compilador
- 8. Execução de sondagem
- 9. Configuração de ajuste fino e compilação com expressões geradoras
Capítulo 6: Gerando Código Fonte
- 1. Gerando fontes no momento da configuração
- 2. Gerando código-fonte no momento da configuração usando Python
- 3. Gerando código-fonte em tempo de construção usando Python
- 4. Registrando as informações da versão do projeto para reprodutibilidade
- 5. Gravando a versão do projeto a partir de um arquivo
- 6. Gravando o hash do Git no momento da configuração
- 7. Gravando o hash do Git em tempo de construção
Capítulo 7: Projetos Estruturantes
- 1. Reutilização de código com funções e macros
- 2. Dividindo fontes CMake em módulos
- 3. Escrevendo uma função para testar e definir sinalizadores do compilador
- 4. Definindo uma função ou macro com argumentos nomeados
- 5. Redefinindo funções e macros
- 6. Descontinuação de funções, macros e variáveis
- 7. Limitando o escopo com
add_subdirectory
- 8. Evitando variáveis globais usando
target_sources
- 9. Organizando projetos Fortran
Capítulo 8: O padrão de superconstrução
- 1. Usando o padrão superconstrução
- 2. Gerenciando dependências com uma superconstrução: I. As bibliotecas Boost
- 3. Gerenciando dependências com um superbuild: II. A biblioteca FFTW
- 4. Gerenciando dependências com um superbuild: III. A estrutura de teste do Google
- 5. Gerenciando seu projeto como uma superconstrução
Capítulo 9: Projetos de idiomas mistos
- 1. Construindo projetos Fortran que usam bibliotecas C/C++
- 2. Construindo projetos C/C++ que usam bibliotecas Fortran
- 3. Construindo projetos C++ e Python usando Cython
- 4. Construindo projetos C++ e Python usando Boost.Python
- 5. Construindo projetos C++ e Python usando pybind11
- 6. Misturando C, C++, Fortran e Python usando Python CFFI
Capítulo 10: Escrevendo um instalador
- 1. Instalando seu projeto
- 2. Gerando cabeçalhos de exportação
- 3. Exportando seus alvos
- 4. Instalando uma superconstrução
Capítulo 11: Projetos de Embalagem
- 1. Gerando pacotes fonte e binários
- 2. Distribuindo um projeto C++/Python construído com CMake/pybind11 via PyPI
- 3. Distribuindo um projeto C/Fortran/Python construído com CMake/CFFI via PyPI
- 4. Distribuindo um projeto simples como pacote Conda
- 5. Distribuindo um projeto com dependências como pacote Conda
Capítulo 12: Documentação de Construção
- 1. Construindo documentação usando Doxygen
- 2. Construindo documentação usando Sphinx
- 3. Combinando Doxygen e Esfinge
Capítulo 13: Geradores Alternativos e Compilação Cruzada
- 1. Compilação cruzada de um exemplo de Olá Mundo
- 2. Compilação cruzada de um binário do Windows com paralelização OpenMP
Capítulo 14: Testando Painéis
- 1. Implantando testes no painel CDash
- 2. Relatando a cobertura do teste para o painel CDash
- 3. Usando o AddressSanitizer e relatando defeitos de memória ao CDash
- 4. Usando o ThreadSanitizer e relatando corridas de dados para CDash
Capítulo 15: Portando um Projeto para CMake