开源软件名称:TheLartians/ModernCppStarter开源软件地址:https://github.com/TheLartians/ModernCppStarter开源编程语言:CMake 71.5%开源软件介绍:ModernCppStarterSetting up a new C++ project usually requires a significant amount of preparation and boilerplate code, even more so for modern C++ projects with tests, executables and continuous integration. This template is the result of learnings from many previous projects and should help reduce the work required to setup up a modern C++ project. Features
UsageAdjust the template to your needs
Eventually, you can remove any unused files, such as the standalone directory or irrelevant github workflows for your project. Feel free to replace the License with one suited for your project. To cleanly separate the library and subproject code, the outer Build and run the standalone targetUse the following command to build and run the executable target. cmake -S standalone -B build/standalone
cmake --build build/standalone
./build/standalone/Greeter --help Build and run test suiteUse the following commands from the project's root directory to run the test suite. cmake -S test -B build/test
cmake --build build/test
CTEST_OUTPUT_ON_FAILURE=1 cmake --build build/test --target test
# or simply call the executable:
./build/test/GreeterTests To collect code coverage information, run CMake with the Run clang-formatUse the following commands from the project's root directory to check and fix C++ and CMake source style. This requires clang-format, cmake-format and pyyaml to be installed on the current system. cmake -S test -B build/test
# view changes
cmake --build build/test --target format
# apply changes
cmake --build build/test --target fix-format See Format.cmake for details. Build the documentationThe documentation is automatically built and published whenever a GitHub Release is created. To manually build documentation, call the following command. cmake -S documentation -B build/doc
cmake --build build/doc --target GenerateDocs
# view the docs
open build/doc/doxygen/html/index.html To build the documentation locally, you will need Doxygen, jinja2 and Pygments on installed your system. Build everything at onceThe project also includes an cmake -S all -B build
cmake --build build
# run tests
./build/test/GreeterTests
# format code
cmake --build build --target fix-format
# run standalone
./build/standalone/Greeter --help
# build docs
cmake --build build --target GenerateDocs Additional toolsThe test and standalone subprojects include the tools.cmake file which is used to import additional tools on-demand through CMake configuration arguments. The following are currently supported. SanitizersSanitizers can be enabled by configuring CMake with Static AnalyzersStatic Analyzers can be enabled by setting CcacheCcache can be enabled by configuring with FAQ
Yes, however you will need to change the library type to an
Simply remove the standalone / documentation directory and according github workflow file.
To keep the template modular, all subprojects derived from the library have been separated into their own CMake modules.
This approach makes it trivial for third-party projects to re-use the projects library code.
To allow IDEs to see the full scope of the project, the template includes the
Glob is considered bad because any changes to the source file structure might not be automatically caught by CMake's builders and you will need to manually invoke CMake on changes.
I personally prefer the
Avoid including derived projects from the libraries CMakeLists (even though it is a common sight in the C++ world), as this effectively inverts the dependency tree and makes the build system hard to reason about. Instead, create a new directory or project with a CMakeLists that adds the library as a dependency (e.g. like the standalone directory). Depending type it might make sense move these components into a separate repositories and reference a specific commit or version of the library. This has the advantage that individual libraries and components can be improved and updated independently.
CPM.cmake should be invisible to library users as it's a self-contained CMake Script.
If problems do arise, users can always opt-out by defining the CMake or env variable
No internet connection is required for building the project, however when using CPM missing dependencies are downloaded at configure time.
To avoid redundant downloads, it's highly recommended to set a CPM.cmake cache directory, e.g.:
As there are a lot of possible options and configurations, this is not (yet) in the scope of this template. See the CPack documentation for more information on setting up CPack installers.
Perhaps the MiniCppStarter is something for you! Related projects and alternatives
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论