cpm-cmake / CPM.cmake

📦 CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CPM on monorepos

gshanemiller opened this issue · comments

CPM's ability to fetch dependencies from Github is cool, and something I will eventually get to. I also like there's no need for 61 million helper files like conan or vpkg.

However, in the present case I have a large mono repository ~25 million lines of C/C+ code. This repository has ~250 libraries all inside the repo. As such there is no need to fetch from Github. The libraries are organized with a canonical layout that makes it easy to scan and discover.

Here's what I want to do:

  • run a script (that I will provide) to scan the libraries
  • from each library create CPM cmake code for that library and its dependencies. Dependencies, say lib_network depends on lib_network_async will come from meta data I provide
  • use the output of the previous bullet to autogenerate a Cmakefile with CPM CPMAddPackage commands
  • logically extend dependencies in CMakeLists.txt for all the tasks, unit tests, integration tests
  • cmake to build

Desired impact:

  • Other than manually specifying the dependencies between libraries in a meta-file, the full CMakeLists.txt file is auto-built
  • Later I can move individual libraries to Github while keeping the overall process and structure unchanged

Now this will require a CPMAddPackage to understand a dependency is not in github, but rather it's in a directory tree.

Once I have that I can move individual libraries into their own Git repo and revert to CPMAddPackage with Githib urls.

Feasible? My guess: this is not a good use-case since CMake does this out of the box.
Rather once libraries are migrated to standalone Git repos then CPM is well suited.

Meanwhile I'll read your https://gitlab.com/external-packages/cpm.cmake carefully.

Regards!

If I understand correctly, your plan is to replace add_subdirectory with CPM calls to treat the subdirectories as individual projects and be able to migrate easier in the future? In that case, yes this is common and a very much supported use-case with CPM, using the SOURCE_DIR option. See here for an example how to include a directory relative to the current CMakeLists.