{"id":18361444,"url":"https://github.com/john01dav/mbs","last_synced_at":"2026-03-04T08:02:40.247Z","repository":{"id":68687856,"uuid":"135841933","full_name":"john01dav/mbs","owner":"john01dav","description":"A simple cmake-based modular build system for C and C++, designed to be easy to use with a higher level project format than that of cmake.","archived":false,"fork":false,"pushed_at":"2019-06-01T05:31:38.000Z","size":37,"stargazers_count":27,"open_issues_count":0,"forks_count":1,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-27T12:32:20.389Z","etag":null,"topics":["cmake","cpp"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/john01dav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-02T18:21:23.000Z","updated_at":"2025-02-19T01:40:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"81949d53-3341-43f9-8097-b89bdd8a0303","html_url":"https://github.com/john01dav/mbs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/john01dav/mbs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/john01dav%2Fmbs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/john01dav%2Fmbs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/john01dav%2Fmbs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/john01dav%2Fmbs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/john01dav","download_url":"https://codeload.github.com/john01dav/mbs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/john01dav%2Fmbs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30075918,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cmake","cpp"],"created_at":"2024-11-05T22:33:52.247Z","updated_at":"2026-03-04T08:02:40.229Z","avatar_url":"https://github.com/john01dav.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Modular Build System\n====================\n\nOverview\n--------\nCmake, while a very useful tool, has some flaws. Namely, it requires a very verbose specification of the build\nconfiguration. While this allows for significant control of what is happening, it is often more work to setup for\ncomplex projects. This is where Modular Build System, or MBS, is useful. MBS allows the developer to group their code\ninto modules. Each module contains cpp and h files, is either a library or executable binary, and can depend on other\nmodules. When a module depends on another, the headers of the latter module are available to the former, and the former\nwill be linked with the latter (if the former is a library, then linking the former also links the latter, transitively).\nThe developer can then run MBS to convert the module specification in YAML to cmake code, that can then be included in\na cmake project. This allows the high-level specification of MBS to be easily used with the low-level details of cmake,\nwhile simultaneously taking advantage of cmake's support for many different build environments.\n\nUsage\n-----\nThe next section gives instructions for getting MBS on your system. Documentation on how to use MBS once it's intalled is available in [USAGE.md](https://github.com/john01dav/mbs/blob/master/USAGE.md), in the root of the project.\n\nBuilding\n--------\nIn MBS, the modules are specified in a mbs.yml file that then needs to be converted to a cmake file to be included in a\ncmake project to build. Because, presumably, the users of MBS won't have it installed until they can build it, the cmake\nrepresentation is tracked in version control, to allow MBS to be built without already having MBS installed. Other\nprojects using MBS should not do this, and instead should .gitignore (or otherwise) the cmake output from MBS. Because\nMBS includes the cmake file in version control, all that is necessary to build MBS is a recursive clone then a standard\ncmake build procedure:\n\n```shell\ngit clone --recurse-submodules https://github.com/john01dav/mbs.git\nmkdir mbs/build -p\ncd mbs/build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j8\n```\n\nAll of MBS's dependencies are included in the repository via git submodules, or are in the C++17 standard library. A\ncompiler with C++17 (namely, the filesystem library) support is required to build MBS. The provided cmake files for\nbuilding MBS are only tested with GCC and Clang on Linux, however they should work for all other GCC-compatible\ncompilers. The CMakeLists.txt file may need to be changed to support non-GCC-compatible compilers (ie. MSVC), however \nthe code should be compatible with all C++17 compliant compilers.\n\nInstallation on Arch Linux\n------------\nMBS is available in the Arch Linux User Repository (aur) under the name \n[mbs-git](https://aur.archlinux.org/packages/mbs-git/). This AUR package is maintained by a third party and unofficial \nwith respect to both Arch Linux and MBS, and neither makes any claims regarding its veracity or lack of malicious code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohn01dav%2Fmbs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohn01dav%2Fmbs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohn01dav%2Fmbs/lists"}