У меня есть следующая проблема для решения.Решение о построенных объектах во время компиляции
У меня есть компонент А. Этот компонент имеет некоторые подкомпоненты - B, C, D. Используя cmake, я создаю или не те компоненты B, C, D. Это зависит от конфигурации текущей платформы. Моя система cmake делает исполняемые make-файлы (для компонента A) для связывания только тех компонентов, которые использовались в данном запуске cmake. Если компонент B был построен, он добавляется в исполняемый файл, если нет - не связан. То же самое с другим - C, D.
Все эти компоненты B, C, D предоставляют некоторые реализации интерфейса, используемые в компоненте A. Этот компонент должен управлять объектами, созданными B, C, D, и сохранять эти объекты на некоторой карте, используя надлежащий объект в надлежащее время.
Вопрос:
Я хочу, чтобы достичь какого-то простого и надежного механизма для добавления этих объектов, реализующим интерфейс автоматически, так же, как сейчас с привязкой - связанно только модули, которые были построены. То же самое с этими объектами - я хотел бы, чтобы они были зарегистрированы в компоненте A только тогда, когда они были скомпилированы.
Мне трудно объяснить это. Идея проста - построить некоторую карту этих объектов во время компиляции. Компилируемые компоненты должны доставить свой объект на эту карту.
Вы можете решить эту проблему, используя директивы препроцессора, установленные системой makefile/cmake. Например, если компонент B скомпилирован и должен быть включен при компиляции A, вы можете использовать директивы, такие как '#ifdef COMPILED_B', чтобы включить поддержку B в A, когда это необходимо. –
Да, это возможно, но я бы хотел избежать #ifdef в исходном коде. Я просто хотел узнать, как другие люди делают это более сложным способом. – user2301299