{"id":46206767,"url":"https://github.com/tobiaswallner/bpm.cmake","last_synced_at":"2026-05-01T22:01:13.049Z","repository":{"id":341746923,"uuid":"1171323495","full_name":"TobiasWallner/BPM.cmake","owner":"TobiasWallner","description":"A light weight binary package manager for CMake builds","archived":false,"fork":false,"pushed_at":"2026-04-19T17:28:35.000Z","size":6124,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-19T19:33:54.642Z","etag":null,"topics":["cmake","cpp","dependency-manager","fetchcontent-alternative","find-package","modern-cmake","package-management","package-manager","reproducible-builds","semver"],"latest_commit_sha":null,"homepage":"","language":"CMake","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TobiasWallner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-03T05:19:26.000Z","updated_at":"2026-04-19T17:28:40.000Z","dependencies_parsed_at":"2026-03-03T09:03:17.126Z","dependency_job_id":null,"html_url":"https://github.com/TobiasWallner/BPM.cmake","commit_stats":null,"previous_names":["tobiaswallner/bpm.cmake"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/TobiasWallner/BPM.cmake","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TobiasWallner%2FBPM.cmake","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TobiasWallner%2FBPM.cmake/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TobiasWallner%2FBPM.cmake/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TobiasWallner%2FBPM.cmake/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TobiasWallner","download_url":"https://codeload.github.com/TobiasWallner/BPM.cmake/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TobiasWallner%2FBPM.cmake/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32514340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"online","status_checked_at":"2026-05-01T02:00:05.856Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","dependency-manager","fetchcontent-alternative","find-package","modern-cmake","package-management","package-manager","reproducible-builds","semver"],"created_at":"2026-03-03T07:05:40.148Z","updated_at":"2026-05-01T22:01:13.042Z","avatar_url":"https://github.com/TobiasWallner.png","language":"CMake","funding_links":[],"categories":[],"sub_categories":[],"readme":"BPM\n======\n\nStatus\n-------\n\nExperimental\n\n[![Tests](https://github.com/TobiasWallner/BPM.cmake/actions/workflows/tests.yml/badge.svg)](https://github.com/TobiasWallner/BPM.cmake/actions/workflows/tests.yml)\n\nWhat is BPM\n------------\n\nBPM.cmake makes it easy to include libraries in C/C++ projects.\n\nIt is a **CMake-native package manager and dependency solver** for CMake-based Git repositories.\n- resolves version and constraints across your dependency graph (yes, even diamond dependencies)\n- resolves package options across your dependency graph\n- caches repositories, sources, builds and installations reproducibly\n- separates builds and installations by versions, toolchains, environments and other build options\n- integrates dependencies either as installed packages or source-only libraries.\n\nTable of Contents \n------------------\n- [Status](#status)\n- [What is BPM](#what-is-bpm)\n- [Quickstart](#quickstart)\n- [Adding Dependencies](#adding-dependencies)\n- [Make Dependencies Available](#make-dependencies-available)\n- [Caching](#caching)\n- [Create Installable CMake Packages](#create-installable-cmake-packages)\n- [Additional Options](#additional-options)\n- [Error Messages](#error-messages)\n\nQuickstart\n----------\n\n### Requirements:\n- CMake: https://cmake.org/\n- Git: https://git-scm.com/\n\n### Installation\n\nIn your project do:\n\nfor Linux:\n```bash\nmkdir -p cmake\ncurl -o cmake/BPM.cmake \"https://github.com/TobiasWallner/BPM.cmake/releases/download/v0.4.9/BPM.cmake\" -L\n```                     \n\nfor Windows:\n```powershell\nmkdir cmake\nInvoke-WebRequest -Uri \"https://github.com/TobiasWallner/BPM.cmake/releases/download/v0.4.9/BPM.cmake\" -OutFile \"cmake/BPM.cmake\"\n```\n\n### Example:\n```cmake\ncmake_minimum_required(VERSION 3.22)\n############################# LIBRARIES ##################################\n\nproject(my_project)\n\n# ---- Include BPM -------------------------------------------------------\ninclude(cmake/BPM.cmake)\n\n# ---- Declare Dependencies ----------------------------------\n# get fmt library with exact version: exact `major.minor.patch`\n# Infer package: `fmt`\nBPMAddInstallPackage(\"https://github.com/fmtlib/fmt#10.0.0\")\n\n# get glaze library with version constraint `^` (compatible): exact `major`, equal or better `minor.patch`\nBPMAddSourcePackage(\"https://github.com/stephenberry/glaze#^v7.2.1\")\n\n# get mqtt library with version constraint `~` (patch): exact `major.minor`, equal or better `patch`\n# Pass the option: `PAHO_WITH_MQTT_C=ON` to the library\n# Use the package: `PahoMqttCpp` \nBPMAddInstallPackage(\"https://github.com/eclipse-paho/paho.mqtt.cpp#~1.6.0\" OPTIONS PAHO_WITH_MQTT_C=ON PACKAGES PahoMqttCpp)\n\n# ---- Make packages available -------------------------------------------\n# solves dependency graph, downloads and installs packages (see Caching)\n# and integrates packages via `find_package` or `add_subdirectory` depending on how they were added\nBPMMakeAvailable()\n\n############################# EXECUTABLE ##################################\n\nadd_executable(${PROJECT_NAME}\n  main.cpp\n)\n\ntarget_link_libraries(${PROJECT_NAME} PRIVATE\n  fmt::fmt\n  glaze::glaze\n  PahoMqttCpp::paho-mqttpp3\n)\n```\n\n\nAdding Dependencies\n-------------------\n\n- `BPMAddInstallPackage()`: is used to register packages that should be installed. Will install release builds.\n- `BPMAddSourcePackage()`: is used to register packages that should be integrated as source projects.\n\nThe functions have two ways they can be used. A **short-** and a **long-form**.\n\n### Short-Form\n\nThe following short form is provided to quickly add libraries in one line to your project.\nOptional arguments are shown in square brackets `[...]`.\n\n```cmake\nBPMAddInstallPackage(\"path/name#\u003cconstraint/version/tag/commit\u003e\"\n    [PACKAGES \u003clist-of-packages\u003e]\n    [OPTIONS \u003clist-of-options\u003e]\n    [PRIVATE]\n)\nBPMAddSourcePackage(\"path/name#\u003cconstraint/version/tag/commit\u003e\"\n    [OPTIONS \u003clist-of-options\u003e]\n    [PRIVATE]\n)\n```\n\nRequired: `\u003cpath/name\u003e#\u003cconstraint/version/tag/commit\u003e`\n  - `\u003cpath/name\u003e`: The path to the git repository. The package name is inferred from the last path segment, ignoring a trailing `.git`.\n  Example: `https://github.com/fmtlib/fmt.git` becomes `fmt`.\n  - `\u003cconstraint/version/tag/commit\u003e` \n\nOptional: \n  - `PACKAGES \u003clist-of-packages\u003e`: (only for `BPMAddInstallPackage()`)\n    - If not provided BPM assumes that the package to integrate with `find_package` has the same name as the package name.\n    - If provided the packages from the list will be integrated with `find_package`.\n  - `OPTIONS \u003cname=value\u003e [\u003cname=value\u003e ...]`\n    - A list of options that should be set before building the package\n    - Option resolving:\n      - Options that are explicitly set will be compared during the configuration and if they are conflicting (same name with different values) an error is generated\n      - If options are not explicitly set a library is allowed to inherit that option from a different package that has set it explicitly\n  - `PRIVATE`: Libraries that are marked with `PRIVATE` will be added as a dependency to this project but not to other projects depending on it. Example use cases: \n    - You want to add a library like `googletest` or `catch2` for testing, but do not want that users of your library have that testing library as a dependency, since it is not involved in your actual library. \n    - You are using a library that is completely contained within your library and does not leak any API or side effects.\n\nImplicitly inferred:\n- `NAME` The repository name will be inferred from the last path segment (ignoring trailing `.git`)\n- `PACKAGES` If not provided: the repository package (if it is an installation target) will be inferred from the name\n- The version/git-tag/commit-hash will be inferred from the string after the `#`\n\nThe version can be:\n- `1.2.3`: Major.Minor.Patch version numbers\n- `v1.2.3`: Optionally have a leading `v`\n- `\u003e=v1.2.3`: Optionally with a leading constraint qualifier\n\nVersions can optionally have constraint qualifiers:\n- `\u003e=`: This version or a greater major, minor or patch number\n- `^`: This version or one with a greater minor or patch number\n- `~`: This version or one with a greater patch number\n- `=`: Exactly this version (default if none is provided)\n- `\u003c`: Only versions less than (has to be paired with one of other ones)\n\nGit-Tags and Commit-Hashes can optionally have a constraint qualifiers:\n- `\u003e=`: This version or a greater major, minor or patch number\n- `=`: Exactly this version (default if none is provided)\n\nExamples:\n- `BPMAddInstallPackage(\"https://github.com/fmtlib/fmt#\u003e=10.0.0\")`\n- `BPMAddInstallPackage(\"https://github.com/fmtlib/fmt#\u003e=10.0.0\u003c11.1.0\")`\n- `BPMAddInstallPackage(\"https://github.com/fmtlib/fmt#12.1.0\" PACKAGES fmt)` \n- `BPMAddInstallPackage(\"https://github.com/fmtlib/fmt#12.1.0\" OPTIONS BUILD_EXAMPLES=ON)` ... BPM turns examples off by default.\n- `BPMAddInstallPackage(\"https://github.com/google/googletest#v1.17.0\" PRIVATE)` ... Do not export testing libraries as dependencies for the user of your library\n\nSame for `BPMAddSourcePackage`.\n\n### Long-Form\n\nIf you need more control you can use the following long form instead:\n\n```cmake\nBPMAddInstallPackage(\n  NAME \u003cname\u003e\n  PACKAGES \u003clist of packages\u003e\n  GIT_REPOSITORY \u003cpath to repo\u003e\n  GIT_TAG \u003cconstraint/version/tag/commit\u003e\n  OPTIONS \u003coptional-list-of-options\u003e\n)\n```\n\n```cmake\nBPMAddSourcePackage(\n  NAME \u003cname\u003e\n  GIT_REPOSITORY \u003cpath to repo\u003e\n  GIT_TAG \u003cconstraint/version/tag/commit\u003e\n  OPTIONS \u003coptional-list-of-options\u003e\n)\n```\n\n### Required:\n- `NAME`: The name of the package/library\n- `GIT_REPOSITORY`: Path to the git repository\n- `GIT_TAG`: Provide the git tag, version, version constraints, a commit-hash here.\n\n### Optional:\n- `PACKAGES`: A list of packages, from the library, that shall be integrated using `find_package`. Default is inferred from the package name. (only for `BPMAddInstallPackage()`)\n- `OPTIONS`: Optional list of options that will be passed when configuring the package.\n  - Option resolving:\n    - Options that are explicitly set will be compared during the configuration and if they are conflicting (same name with different values) an error is generated\n    - If options are not explicitly set a library is allowed to inherit that option from a different package that has set it explicitly\n\nMake Dependencies Available\n-----------------------------\n\nCall `BPMMakeAvailable()` once after you have declared all libraries to:\n  - solve the dependency graph\n    - even diamond dependencies\n  - Download libraries into the cache (default is `${CMAKE_BINARY_DIR}/_deps`)\n  - Create a manifest and unique build hash that depends on: System, compiler, options, flags, versions, cpu, toolchains ... etc.\n  - Optionally build and installs libraries.\n  - Integrates libraries with `find_package` or `add_subdirectory`\n  \n### Optional Flags:\n- `NO_DOWNLOAD`: Will not download/clone/fetch repositories and only use what is already present\n  - if the repository has not been mirrored yet --\u003e fail instead of clone\n  - if the repository might be out-of-date (triggered by '`\u003e=`' and maybe '`^`', '`~`') --\u003e skips the fetching (will result in faster configurations)\n- `NO_DOWNLOAD_UPDATES`: Will allow to initially download/clone a repository but not to fetch and check for updates\n  - if the repository is not part of the mirror --\u003e will download/clone\n  - if the repository might be out-of-date (triggered by '`\u003e=`' and maybe '`^`', '`~`') --\u003e skips the fetching (will result in faster configurations)\n- `VERBOSE`: Will print intermediary steps and results, especially of the version solving process\n\n`BPMMakeAvailable()` Also generates the file `.bpm-registry` in the projects source directory. \nIt contains all the packages/libraries that this library needs (aka. that have been added with `BPMAddInstallPackage()` or `BPMAddSourcePackage()`). This file is needed another project that uses BPM and adds your project as a dependency.\nAdd that file to your git repository.\nThis file will only change if you change the added packages. \n\nCaching\n-------\n\nBPM will cache repository mirrors, sources, builds and installations.\n\nThe default cache, if none is provided, is inside the build directory `${CMAKE_BINARY_DIR}/_deps`.\n\nHowever, one can provide a different cache directory by:\n  - Setting the environment variable `export BPM_CACHE=path/to/cache`\n  - Setting the cmake configuration flag `-DBPM_CACHE=path/to/cache` (has precedence over environment variables)\n\nThat way the same cache can be used for multiple projects which avoids re-downloading and re-building and re-installing the same library over and over again for every project. \n\nEach package has the following caches:\n - `/mirror`: A memory and disk size efficient mirror (clone) of the repository.\n - `src/\u003ccommit\u003e`: Populated sources of the mirror at specific git-commits.\n - `build/\u003cmanifest-hash\u003e`: Binary build directory for package builds.\n - `install/\u003cmanifest-hash\u003e`: The directory where that specific build will be installed (only generated for `BPMAddInstallPackage()`)\n - `manifest/\u003cmanifest-hash\u003e.manifest`: The manifest files containing: Compiler identity, System description, Versions, Flags, ... etc.\n\nTo allow concurrent builds, packages are protected by lock files.\n\nCreate Installable CMake Packages\n---------------------------------\n\nIt is not necessary to use this function to create BPM package. \n\nYou can still write your own installation procedure like you normally would. \n\n`BPMCreateInstallPackage()` just is a small convenience wrapper around the standard CMake \ninstall/export/package steps for a library package.\n\n### What it does\n\nIt takes one or more already-defined library targets and sets up the usual package installation boilerplate:\n\n- installs the target artifacts (.a, .lib, .so, .dll, etc.)\n- installs public headers from the package’s include/ directory\n- exports the targets as `\u003cPackageName\u003eTargets.cmake`\n- generates and installs `\u003cPackageName\u003eConfig.cmake`\n- optionally generates and installs `\u003cPackageName\u003eConfigVersion.cmake` if `PROJECT_VERSION` is set\n\n### Library Structure Assumptions\n\n`BPMCreateInstallPackage()` assumes that:\n- your libraries public include directory is `include/` (default) or provided via `PUBLIC_INCLUDE_DIRS`.\n- your targets already describe the correct build-time and install-time include paths:\n\n```cmake\ntarget_include_directories(${PROJECT_NAME} PUBLIC\n  $\u003cBUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include\u003e\n  $\u003cINSTALL_INTERFACE:include\u003e\n)\n```\n\n### Function signatures\n\n#### Shorthand-form\n\nUse this when the package contains a single target and you want the package name and namespace to match that target name.\n\n```cmake\n# create your library and add sources\nadd_library(\u003ctarget\u003e STATIC ...)\n\n# add include directories to your library\ntarget_include_directories(\u003ctarget\u003e PUBLIC\n    $\u003cBUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include\u003e\n    $\u003cINSTALL_INTERFACE:include\u003e\n)\n\n# create an alias in case it is used as a source library with `add_subdirectory`\nadd_library(\u003cnamespace\u003e::\u003ctarget\u003e ALIAS \u003ctarget\u003e)\n\n# create an installable package so it can be used with `find_package`\nBPMCreateInstallPackage(\u003ctarget\u003e)\n```\n\nEquivalent to the longhand form with:\n- `PACKAGE_NAME` = `\u003ctarget\u003e`\n- `NAMESPACE` = `\u003ctarget\u003e`\n- `TARGETS` = `\u003ctarget\u003e`\n- `PUBLIC_INCLUDE_DIRS` = `include`\n- `HEADER_FILES_MATCHING` = `\"*.h\" \"*.hh\" \"*.hpp\" \"*.hxx\"`\n\n##### Long-form\n\nUse this when you want to set the package name, namespace, multiple library targets, or custom header patterns.\n```cmake\nadd_library(\u003ctarget\u003e ...)\n\ntarget_include_directories(\u003ctarget\u003e PUBLIC\n    $\u003cBUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include\u003e\n    $\u003cINSTALL_INTERFACE:include\u003e\n)\n\nBPMCreateInstallPackage(\n    PACKAGE_NAME \u003cpackage-name\u003e\n    [NAMESPACE \u003cnamespace\u003e]\n    TARGETS \u003ctarget\u003e [\u003ctarget\u003e ...]\n    [HEADER_FILES_MATCHING \u003cpattern\u003e [\u003cpattern\u003e ...]]\n)\n```\n\n##### Required Arguments\n\n- `PACKAGE_NAME`: required | exactly 1 argument  \n  - Package name that the user of your library can then integrate with `find_package(...)`\n  - used for:\n    - install location `lib/cmake/${PACKAGE_NAME}`\n    - `${PACKAGE_NAME}Config.cmake`\n    - `${PACKAGE_NAME}Targets.cmake`\n\n- `TARGETS` required | 1 or more arguments\n  - each argument must be an existing CMake target (from `add_library` or `add_executable`)\n  - Targets that will be installed and exported into the package\n  - to provide a custom name after installation use: `set_target_properties(your_target_name PROPERTIES EXPORT_NAME install_target_name)` \n\n##### Optional Arguments\n\n- `NAMESPACE`: optional | exactly 1 argument  \n  - namespace prefix for exported targets\n  - Default if omitted: `NAMESPACE=\u003cPACKAGE_NAME\u003e`\n\n- `PUBLIC_INCLUDE_DIRS`: optional | 0 or more\n  - Public include directories that should be installed\n  - Default if omitted: `include/`\n\n- `HEADER_FILES_MATCHING`: optional | 1 or more arguments\n  - Structure of header files to install\n  - Default if omitted: `*.h`, `*.hh`, `*.hpp`, `*.hxx`\n  \n\n##### EXAMPLE\n\nIn your library do:\n```cmake\nproject(foo)\n\n# We declare the `faa` library target.\n#\n# We add the prefix `foo_` to prevent name collisions for when this project\n# is integrated with `add_subdirectory()`\n#\nadd_library(foo_faa ...)\n\n# When the library is installed we want the user to use:\n#\n#       `foo::faa`,\n#\n# Instead of `foo_faa` or `foo::foo_faa`. \n#\n# The namespace `foo::` is added later in `BPMCreateInstallPackage` \n# by `install(EXPORT ... NAMESPACE foo::)`.\n#\n# The `::` also helps CMake treat the name as an imported or alias target. \n#\nset_target_properties(foo_faa PROPERTIES EXPORT_NAME faa)\n\n# Give `BPMAddSourcePackage()` or `add_subdirectory()` users the same nice target name that installed-package\n# users will get from `BPMAddInstallPackage()` or `find_package(foo)`.\n#\nadd_library(foo::faa ALIAS foo_faa) \n\n# Define public include directories for both build-tree and install-tree usage.\ntarget_include_directories(foo_faa PUBLIC\n    $\u003cBUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include\u003e\n    $\u003cINSTALL_INTERFACE:include\u003e\n)\n\n# Declare another real build-tree target.\nadd_library(foo_bar ...)\n\n# Export this target as foo::bar after installation.\nset_target_properties(foo_bar PROPERTIES EXPORT_NAME bar)\n\n# Also provide the same name for `add_subdirectory()` users.\nadd_library(foo::bar ALIAS foo_bar)\n\n# Define include directories\ntarget_include_directories(foo_bar PUBLIC\n    $\u003cBUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include\u003e\n    $\u003cINSTALL_INTERFACE:include\u003e\n)\n\n# Create an installable CMake package.\n#\n# PACKAGE_NAME \n#   controls:\n#\n#       `BPMAddInstallPackage(\"path/to/repo/foo#v1.2.3\" PACKAGES foo)`\n#       or\n#       `find_package(foo CONFIG REQUIRED)`\n#       \n#\n# TARGETS \n#   are the real build-tree targets that should be installed/exported.\n#   Aka. this libraries `add_library(\u003ctarget\u003e ...)`\n#\n# NAMESPACE \n#   controls the prefix added to all exported target names.\n#   In this case we want it to be prefixed by `foo::`\n#\nBPMCreateInstallPackage(\n    PACKAGE_NAME foo\n    TARGETS foo_faa foo_bar\n    NAMESPACE foo\n)\n```\n\nThen the user can do:\n```cmake\n# add the library to the dependency graph\nBPMAddInstallPackage(\"path/to/repo/foo#v1.2.3\")\n\n# solve the dependency graph, install libraries and integrate the added libraries\nBPMMakeAvailable()\n\n# declare your own project\nadd_executable(main main.cpp)\n\n# link against the libraries from the package\ntarget_link_libraries(main PRIVATE foo::faa foo::bar)\n```\n\nOr if your user does not use BPM and want to use `find_package` instead:\n```cmake\n# integrate a manually installed library\nfind_package(foo)\n\n# declare your own project\nadd_executable(main main.cpp)\n\n# link against the libraries from the package\ntarget_link_libraries(main PRIVATE foo::faa foo::bar)\n```\n\n\nAdditional Options\n------------------\n\nAdditional options that can be set either as a CMake variable `set(...)` as a CMake argument `-D...` or as an environment variable.\n\n- `BPM_CLEAN_SOURCE_AFTER_INSTALL`\n  - Default: `TRUE`\n  - If set: will delete the checked out source directory after installing to free space from your filesystem. Does not delete the local mirror, only the files that got created when checking out a specific version/commit.\n\n- `BPM_CLEAN_BUILD_AFTER_INSTALL`\n  - Default: `TRUE`\n  - If set: will delete the build directory and its artifacts to free space from the filesystem.\n\nError Messages\n--------------\n\nError messages are in the form:\n\n```\nBPM [project:package]: message\n```\n\nError messages created by BPM will start with `\"BPM\"`.\n\nThe first parameter in the square-brackets `[]` is the project (aka. its `CMakeLists.txt`) currently being executed.\n\nThe second parameter after the double-colon `:` in the square-brackets `[]` is the package that BPM was processing when the error occurred.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftobiaswallner%2Fbpm.cmake","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftobiaswallner%2Fbpm.cmake","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftobiaswallner%2Fbpm.cmake/lists"}