Я настраиваю среду сборки Cmake для унаследованного мной проекта. У меня есть основной репозиторий, который создает цель, которая может загружать «плагины» (цели dll). Я хочу сохранить каждый плагин в собственном репозитории (каждый представляет собой определенную аппаратную платформу и должен поддерживаться отдельно).
У меня есть каталог под названием «Plugins», в котором эти папки репозитория будут клонированы по мере необходимости.
Как мне заставить CMakeLists.txt в папке «Plugins» добавлять все папки плагинов без добавления явного add_subdirectory для каждого плагина?
Моя цель - разрешить сценарию сборки, который предоставляет исходную конфигурацию и цели отладки / выпуска, также разрешить целевые объекты платформы, которые будут проверять репозитории для платформ, выбранных пользователем, настраивать и строить по запросу. Это единственное произведение, которое я не знаю, как настроить.
Можете ли вы привести пример в качестве ответа?





Когда я делаю это, например, программы, у меня есть макрос CMake, который перечисляет подкаталоги текущей папки:
#########################################################################################
macro(SUBDIRLIST result curdir)
FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
SET(dirlist "")
FOREACH(child ${children})
IF(IS_DIRECTORY ${curdir}/${child})
SET(dirlist ${dirlist} ${child})
ENDIF()
ENDFOREACH()
SET(${result} ${dirlist})
endmacro()
Затем с помощью этого макроса я создаю следующий файл CMakeLists.txt в папке с подкаталогами:
SUBDIRLIST(SUBDIRS ${CMAKE_CURRENT_SOURCE_DIR})
FOREACH(subdir ${SUBDIRS})
ADD_SUBDIRECTORY(${subdir})
ENDFOREACH()
Когда CMake генерируется с использованием этой родительской папки, он автоматически добавляет каждую содержащуюся в нем папку с помощью add_subidrectory ().
Он выглядит почти идентично тому коду, с которым я столкнулся ранее. github.com/gwaldron/osgearth/issues/608 За исключением того, что они добавляют каталоги в список с помощью добавления, а не набора. Я надеялся на встроенную операцию, но полагаю, что смогу просто распаковать процесс.
Есть вероятность, что мы получили код из одного источника. У меня есть файл макросов 5+ лет назад.
Я сделал что-то похожее, но развернутое, и добавил проверку наличия CmakeLists.txt в каждом подкаталоге перед вызовом add_subdirectory (), поскольку новые проекты являются подмодулями git, все проверяемые каталоги подключаемых модулей строго необязательны, подмодули - это подмодули. доступ ограничен разрешениями gitlab, папки всегда будут присутствовать, даже если они пусты, и приложение должно быть создано, даже если плагины отсутствуют. Я буду обновлять ответ, если позволит время.