Subproject#
Separating the project into subproject makes it possible to import/build any component of the project as standalone, or against a different version of the main project, e.g. against a pre-installed version.
Examples of where you could make a project’s feature into a subproject is for bindings to other languages and for the project’s test-suite.
When to define a subproject?#
The subproject is in a self-contained folder
The feature is controlled by a project option
The main project can be imported within the subproject
Making it two-way compatible#
Use <PROJECT>_VERSION
and/or if(TARGET)
to check if the project is run
from within the main project, and otherwise import the main project.
How do I keep it in sync with the main#
When calling the subproject through add_subdirectory
, the version
compatibility is guaranteed. The issue is with importing the main project to
match commits in FetchContent_Declare
. Using built-in CMake functionality,
you do not have such a feature, but this can be done with an external module:
DynamicVersion
.