[DIVULGAÇÃO] Template para projetos C++ com gerenciador de pacotes vcpkg
Eae pessoal como estão? Estou apresentando outro template para projetos só que dessa vez já vem um vcpkg configurado.
Há alguns anos, eu já havia postado aqui um template que fiz para projetos mais simples, o qual continha um CMake minimamente configurado e um ambiente de testes que utilizava o Google Test como biblioteca.
Esse template pode ser visualizado clicando aqui.
O link para o template deste artigo está no final da página, caso queiram pular a breve explicação sobre ele.
Caso não conheçam o CMake e o Google Tests, vocês podem conferir alguns artigos que escrevi sobre eles:
O template está organizado da seguinte forma:
.
├── CMakeLists.txt
├── CMakePresets.json
├── include
│ └── sum.hpp
├── Makefile
├── README.md
├── src
│ ├── main.cpp
│ └── sum.cpp
├── tests
│ └── unit-tests
│ ├── CMakeLists.txt
│ ├── run-tests.cpp
│ └── sum-tests.cpp
├── vcpkg-configuration.json
├── vcpkg.json
└── vcpkg-no-exactly-version.json
O CMake está configurado para tudo que você colocar em include e src ele conseguir compilar, então pode criar novas pastas e novos arquivos que deve funcionar normalmente, caso queira criar bibliotecas internas separadas é necessario modificar o CMake para comportar essa mudança.
Diferente do template anterior, esse não consta mais com um script build.sh utilizei o próprio Makefile para auxiliar no processo de build, testes, execução do projeto e instalação de dependências via vcpkg. O Makefile possui diferentes targets para automatizar o ciclo de vida do projeto, abaixo tem uma lista com eles.
- install-deps
- cmake
- build
- run
- test
- clean-all
Além disso foi criado alguns parametros configurações para o build como o tipo de build se vai ser uma Release ou o build tem que ser feito em modo Debug além disso existe a opção de habilitar ou não os testes e um parametro a mais que é filtrar algum teste adicionado via add_test no CMake, caso queira rodar algum teste especifico do Google Test é necessário rodar manualmente por enquanto.
- BUILD_TYPE=<Release|Debug>
- TESTS=<OFF|ON>
- TEST_NAME
O uso do Makefile seria o seguinte.
make <target> <params-list>
Basta modificar o target e o param-list para os valores que comentei acima e já deve estar sendo configurado corretamente.
Sobre o vcpkg, temos dois arquivos de configuração. Como padrão deixei o vcpkg.json utilizando versão exata do pacote que eu quero utilizar e como alternativa caso queira utilizar uma configuração mais flexível tem o vcpkg-no-exactly-version.json, para usar a segunda configuração, basta renomear para vcpkg.json o arquivo e já deve funcionar normalmente.
OCMakeLists.txt dos testes quando se quer adicionar um novo arquivo de testes vai ser necessário adicionar cada novo arquivo na mão, fiz dessa forma, pois eu vou adicionando aos poucos os testes, então testes que fiz que estão para ser finalizados não ficam quebrando no processo de build.
Espero que o template seja útil para vocês como está para mim e sugiram melhorias.
Repositório com o template: https://github.com/italonicacio/cmake_vcpkg_template