Um modelo C++ rápido para projetos CMake modernos, que pretende ser um ponto de partida fácil de usar.
Esta é minha opinião pessoal sobre esse tipo de modelo; portanto, posso não usar as práticas recomendadas ou você pode discordar de como faço as coisas. Todo e qualquer feedback é muito apreciado!
Configuração e projeto moderno do CMake , que, até onde sei, utiliza as melhores práticas,
Um exemplo de configuração do Clang-Format , inspirado no modelo básico do Google , com pequenos ajustes. Isto é apenas um ponto de partida, já que o estilo de codificação é uma questão subjetiva, todos são livres para excluí-lo (para o padrão LLVM ) ou fornecer sua própria alternativa,
Integração de analisadores estáticos , com Clang-Tidy e Cppcheck , sendo o primeiro a opção padrão,
Suporte Doxygen , através da opção ENABLE_DOXYGEN
, que você pode habilitar se desejar utilizá-la,
Suporte a testes unitários , através do GoogleTest (com opção de habilitar GoogleMock ) ou Catch2 ,
Cobertura de código , habilitada usando a opção ENABLE_CODE_COVERAGE
, por meio da integração Codecov CI,
Suporte ao gerenciador de pacotes , com Conan e Vcpkg , através de suas respectivas opções
Fluxos de trabalho de CI para Windows, Linux e MacOS usando GitHub Actions , fazendo uso dos recursos de cache, para garantir tempo de execução mínimo,
Modelos .md para: README , Diretrizes de contribuição , Problemas e solicitações pull ,
Licença permissiva para permitir a integração da forma mais fácil possível. O modelo está licenciado sob o Unlicense,
Opções para construir como uma biblioteca ou executável somente de cabeçalho, não apenas uma biblioteca estática ou compartilhada.
Integração Ccache , para acelerar os tempos de reconstrução
Estas instruções fornecerão uma cópia do projeto em funcionamento em sua máquina local para fins de desenvolvimento e teste.
Este projeto pretende ser apenas um modelo, portanto as versões do software utilizado podem ser alteradas para melhor atender às necessidades do(s) desenvolvedor(es). Se desejar usar o modelo como está , ou seja, usar as versões recomendadas aqui, você precisará de:
CMake v3.15+ - encontrado em https://cmake.org/
Compilador C++ - precisa suportar pelo menos o padrão C++ 17 , ou seja, MSVC , GCC , Clang
Nota: Você também precisa fornecer ao CMake um gerador compatível.
É bastante fácil instalar o projeto, tudo que você precisa fazer é cloná-lo no GitHub ou gerar um novo repositório a partir dele (também no GitHub ).
Se você deseja clonar o repositório, em vez de gerar a partir dele, basta executar:
git clone https://github.com/filipdutescu/modern-cpp-template/
Após terminar de obter a cópia do projeto, com qualquer um dos métodos acima, crie uma nova pasta na pasta include/
, com o nome do seu projeto. Edite cmake/SourcesAndHeaders.cmake
para adicionar seus arquivos.
Você também precisará renomear o arquivo cmake/ProjectConfig.cmake.in
para começar com o nome exato do seu projeto . Como cmake/MyNewProjectConfig.cmake.in
. Você também deve fazer as mesmas alterações nos fluxos de trabalho do GitHub fornecidos, principalmente .github/workflows/ubuntu.yml
, nos quais você deve substituir a opção CMake -DProject_ENABLE_CODE_COVERAGE=1
por -DMyNewProject_ENABLE_CODE_COVERAGE=1
.
Por fim, altere "Project"
de CMakeLists.txt
, de
project (
"Project"
VERSION 0.1.0
LANGUAGES CXX
)
ao nome exato do seu projeto , ou seja, usando o nome anterior ele ficará:
project (
MyNewProject
VERSION 0.1.0
LANGUAGES CXX
)
Para instalar um projeto já compilado, você precisa executar o destino install
com CMake. Por exemplo:
cmake --build build --target install --config Release
# a more general syntax for that command is:
cmake --build < build_directory > --target install --config < desired_config >
Para construir o projeto, tudo o que você precisa fazer, após instalar corretamente o projeto , é executar uma rotina CMake semelhante à abaixo:
mkdir build/ && cd build/
cmake .. -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target install
Nota: O
CMAKE_INSTALL_PREFIX
personalizado pode ser omitido se você desejar instalar no local de instalação padrão.
Mais opções que você pode definir para o projeto podem ser encontradas no arquivo cmake/StandardSettings.cmake
. Para certas opções, configurações adicionais podem ser necessárias em seus respectivos arquivos *.cmake
(ou seja, Conan precisa de CONAN_REQUIRES
e pode precisar que CONAN_OPTIONS
sejam configurados para funcionar corretamente; os dois estão configurados no arquivo cmake/Conan.cmake
).
Para gerar a documentação do projeto, você precisa configurar o build para usar o Doxygen. Isso é feito facilmente, modificando o fluxo de trabalho mostrado acima da seguinte forma:
mkdir build/ && cd build/
cmake .. -D < project_name > _ENABLE_DOXYGEN=1 -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target doxygen-docs
Nota: Isso irá gerar um diretório
docs/
no diretório raiz do projeto .
Por padrão, o modelo usa o Google Test para testes de unidade. O teste de unidade pode ser desabilitado nas opções, definindo ENABLE_UNIT_TESTING
(de cmake/StandardSettings.cmake) como falso. Para executar os testes, basta utilizar CTest, do diretório build, passando a configuração desejada para a execução dos testes. Um exemplo deste procedimento é:
cd build # if not in the build directory already
ctest -C Release # or `ctest -C Debug` or any other configuration you wish to test
# you can also run tests with the `-VV` flag for a more verbose output (i.e.
# GoogleTest output as well)
Se aplicável, deverá ser apresentado aqui.
Se aplicável, deverá ser apresentado aqui.
Leia CONTRIBUTING.md para obter detalhes sobre como você pode se tornar um contribuidor e o processo para enviar solicitações pull para nós.
Este projeto utiliza SemVer para versionamento. Uma lista de versões existentes pode ser encontrada nos releases do projeto.
Este projeto está licenciado sob Unlicense - consulte o arquivo LICENSE para obter detalhes