Handling configuration related options between multiple projects

Within the context of FetchContent, How would you best approach constructs like if (build_debug) or if (build_singlethreaded) which are configured from cmake and passed through macro defines (or other means) to cpp code.

Usually these would be associated with specific configurations, (build_debug for instance), As such they might be set as compile time definitions using $<$<CONFIG:Debug>:...>.

In the context of multiple projects, if the “accounted” configurations don’t overlap. One project might have support for a Profile configuration and an other might have 2 different Debug configurations. What would be the recommended approach to allow one project to use the other and sort of specify how the configurations should be mapped.

For example when the configuration is “Profile” if a dependency lacks explicit support for “Profile” use its settings and configuration as specified for “Release”.

This isn’t to achieve a workaround, I have control over each individual project. I’m looking for a systematic method of being able to have projects with project specific configuration and have those be able to work together.