Skip to content

CPM on monorepos #535

@gshanemiller

Description

@gshanemiller

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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions