{"id":21974423,"url":"https://github.com/abdes/asap","last_synced_at":"2025-04-05T09:05:57.900Z","repository":{"id":53379798,"uuid":"157962217","full_name":"abdes/asap","owner":"abdes","description":"A modern cmake starter project for C++ with a complete build lifecycle, testing, dependency management, etc. Portable across Linux, OS X and Windows.","archived":false,"fork":false,"pushed_at":"2024-10-22T06:32:13.000Z","size":7873,"stargazers_count":143,"open_issues_count":0,"forks_count":11,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-03-29T08:05:04.560Z","etag":null,"topics":["bootstrap","build","ci","cmake","cmakelists","continuous-integration","cplusplus","cpp","dependency-management","dev-containers","modern-cmake","modern-cmake-template","modern-cpp","modular","portable","starter-project"],"latest_commit_sha":null,"homepage":"","language":"CMake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/abdes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-17T07:44:16.000Z","updated_at":"2025-03-06T20:16:37.000Z","dependencies_parsed_at":"2024-10-22T14:09:46.199Z","dependency_job_id":null,"html_url":"https://github.com/abdes/asap","commit_stats":{"total_commits":714,"total_committers":2,"mean_commits":357.0,"dds":0.008403361344537785,"last_synced_commit":"e32153f360153d24041fa760e7ba353b32a0fd23"},"previous_names":[],"tags_count":49,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2Fasap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2Fasap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2Fasap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/abdes%2Fasap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/abdes","download_url":"https://codeload.github.com/abdes/asap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247312077,"owners_count":20918344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","build","ci","cmake","cmakelists","continuous-integration","cplusplus","cpp","dependency-management","dev-containers","modern-cmake","modern-cmake-template","modern-cpp","modular","portable","starter-project"],"created_at":"2024-11-29T15:45:16.290Z","updated_at":"2025-04-05T09:05:57.680Z","avatar_url":"https://github.com/abdes.png","language":"CMake","readme":"\u003cdiv align=\"center\"\u003e\n\n# Don't waste your time\n\n![Start Now!!](doc/_static/asap-banner.png \"ASAP banner\")\n\n\u003c/div\u003e\n\n\u003ch4 align=\"center\"\u003eA complete starter project for C++ projects built with\n\u003ca href=\"https://cmake.org/\" target=\"_blank\"\u003eCMake\u003c/a\u003e.\u003c/h4\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n-+- Build Status -+-\n\n_develop_\n\n[![Build status - develop][build-status-develop-badge]][build-matrix]\n\n_master_\n\n[![Build status - master][build-status-master-badge]][build-matrix]\n\n-+-\n\n[![Latest release][release-badge]][latest-release]\n[![Commits][last-commit-badge]][commits]\n[![Linux][linux-badge]][latest-release]\n[![Windows][windows-badge]][latest-release]\n[![Mac OS][macos-badge]][latest-release]\n[![License][license-badge]][license]\n[![CII Best Practices][openssf-badge]][openssf-project]\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#key-features\"\u003eKey Features\u003c/a\u003e •\n  \u003ca href=\"#project-documentation\"\u003eProject Documentation\u003c/a\u003e •\n  \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e •\n  \u003ca href=\"#Contributing\"\u003eContributing\u003c/a\u003e •\n  \u003ca href=\"#credits\"\u003eCredits\u003c/a\u003e •\n\u003c/p\u003e\n\n## Key Features\n\nHave you ever found yourself spending countless hours trying to figure out how\nto start a professional C++ project with unit tests, a robust dev workflow,\nchange logs, code coverage, linting, formatting...? The C++ ecosystem is getting\nbetter but is still very far away from other ecosystems such as JavaScript, or\neven Rust. It's certainly easy to use CMake, a compiler and vscode to start a\nhello world project, but as soon as you start having multiple modules, with\nthird party dependencies, testing, coverage, and other development things that a\nprofessional quality project needs, you start wasting hours and hours\ntroubleshooting and configuring until you make it work.\n\nWaste your time no more!\n\nThis starter project solves most of your problems, using the best practices for\nC++ development and modern CMake and allows you to get started in minutes rather\nthan days.\n\n- `CMake` as the build system with or without presets\n- cross-platform portability on Linux, OS X and Windows\n- multiple compilers: clang, g++ and MSVC\n- modular structure with each module self-contained in a subdirectory within the\n  project\n- `CMake` build helpers to facilitate declaration of library, exe, test modules,\n  for the end-to-end lifecycle including doc generation, test, packaging etc...\n- unit testing targets, with by default Google Test as the framework (other\n  frameworks are also possible)\n- code coverage with clang or g++\n- zero-touch valgrind, clang-tidy, clang-format, google sanitizers, etc\n- development can be done locally or in a dev container with vscode\n- faster rebuilds with [`ccache`](https://ccache.dev) empowered caching\n- `CMake` package management with [`CPM`](https://github.com/cpm-cmake/CPM.cmake)\n\n## Project Documentation\n\nWe have detailed guides for setting up an efficient development environment, the\ndevelopment process, project structure, etc. Take a look at the project's github\npages [here](https://abdes.github.io/asap/asap_master/html/).\n\n[![Project Documentation demo][project-docs-thumb]][project-docs-video]\n\n## Getting Started\n\nIt is strongly recommended that you take some time to browse the project\ndocumentation to familiarize yourself with its structure and development\nworkflows.\n\nFor the impatient, or the already experts, below is a short tutorial video for\nhow to start from asap to make your own project.\n\n### 1. Create a new repo from the `asap` template\n\n[![New repo from template demo][from-template-thumb]][from-template-video]\n\n### 2. Make it your own - stage 1\n\nIn this step, we'll clean up the freshly created repo and prepare it for being\ncustomized.\n\n[![Clean-up][cleanup-thumb]][cleanup-video]\n\n### 2. Make it your own - stage 2\n\nIn this step, we'll go into Visual Studio Code to do some heavier customizations\nwhile tracking our changes in git.\n\n[![Customize][customize-thumb]][customize-video]\n\n### 3. Start coding\n\nFor this final tutorial, we will ad an executable module to implement the famous\n\"Hello World!\". You can see how simple it is and how fast it is to hit the\nground running with asap and start focusing on what matters the most: coding.\n\n[![Hello World][hello-world-thumb]][hello-world-video]\n\nTake some time to explore the different build targets in the project, and the\ndocumentation to add tests, documentation etc.\n\n## Contributing\n\nIf you would like to contribute code you can do so through GitHub by forking the\nrepository and sending a pull request. When submitting code, please make every\neffort to follow existing conventions and style in order to keep the code as\nreadable as possible.\n\nBy contributing your code, you agree to license your contribution under the\nterms of the BSD-3-Clause or a more permissive license. All files are released\nwith the BSD-3-Clause license.\n\nRead the [developer guides](https://abdes.github.io/asap/asap_master/html/).\n\n### Submitting a PR\n\n- For every PR there should be an accompanying issue which the PR solves\n- The PR itself should only contain code which is the solution for the given\n  issue\n- If you are a first time contributor check if there is a suitable issue for you\n\n## Credits\n\n- Swift Navigation for their [cmake common\n  tools](https://github.com/swift-nav/cmake) project, an excellent starting\n  point for several of the features in this starter project,\n- The multitude of other open-source projects used to implement this project or\n  to get inspiration - credits in the source code or the documentation as\n  appropriate\n\n[build-matrix]: https://github.com/abdes/asap/actions/workflows/cmake-build.yml?branch=develop\n[build-status-develop-badge]: https://github.com/abdes/asap/actions/workflows/cmake-build.yml/badge.svg?branch=develop\n[build-status-master-badge]: https://github.com/abdes/asap/actions/workflows/cmake-build.yml/badge.svg?branch=master\n[cleanup-thumb]: https://asciinema.org/a/JOXq0l9CLZMolNcGhOnc84tNO.svg\n[cleanup-video]: https://asciinema.org/a/JOXq0l9CLZMolNcGhOnc84tNO?autoplay=1\n[commits]: https://github.com/abdes/asap/commits\n[customize-thumb]: https://cdn.loom.com/sessions/thumbnails/bedff4e1532441a6af6497653e52cede-with-play.gif\n[customize-video]: https://www.loom.com/embed/bedff4e1532441a6af6497653e52cede\n[from-template-thumb]: https://cdn.loom.com/sessions/thumbnails/087f217b73454728900baa8b1487f358-with-play.gif\n[from-template-video]: https://www.loom.com/embed/087f217b73454728900baa8b1487f358\n[hello-world-thumb]: https://cdn.loom.com/sessions/thumbnails/ff20f1771a6d448c8fd7b6e53e117c93-with-play.gif\n[hello-world-video]: https://www.loom.com/embed/ff20f1771a6d448c8fd7b6e53e117c93\n[last-commit-badge]: https://img.shields.io/github/last-commit/abdes/asap\n[latest-release]: https://github.com/abdes/asap/releases/latest\n[license-badge]: https://img.shields.io/github/license/abdes/asap\n[license]: https://opensource.org/licenses/BSD-3-Clause\n[linux-badge]: https://img.shields.io/badge/OS-linux-blue\n[macos-badge]: https://img.shields.io/badge/OS-macOS-blue\n[openssf-badge]: https://bestpractices.coreinfrastructure.org/projects/5917/badge\n[openssf-project]: https://bestpractices.coreinfrastructure.org/projects/5917\n[project-docs-thumb]: https://cdn.loom.com/sessions/thumbnails/131bd53f1a004387b09bbeeb80a41f3e-with-play.gif\n[project-docs-video]: https://www.loom.com/embed/131bd53f1a004387b09bbeeb80a41f3e\n[release-badge]: https://img.shields.io/github/v/release/abdes/asap\n[windows-badge]: https://img.shields.io/badge/OS-windows-blue\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdes%2Fasap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fabdes%2Fasap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fabdes%2Fasap/lists"}