Динамические подкаталоги в сборке cmake - PullRequest
0 голосов
/ 04 декабря 2018

Я настраиваю среду сборки Cmake для проекта, который я унаследовал.У меня есть основной репозиторий, который создает цель, которая может загружать «плагины» (цели DLL).Я хочу сохранить каждый плагин в своем собственном репозитории (каждый представляет определенную аппаратную платформу и должен обслуживаться отдельно).

У меня есть каталог, который называется «Плагины», где эти папки репозитория будут клонироваться по мере необходимости.

Как заставить CMakeLists.txt в папке «Плагины» добавить все папки плагинов, не добавляя явный каталог add_subdirectory для каждого плагина?

Моя цель - разрешить скрипт сборки, который предоставляетисходной конфигурации и целей отладки / выпуска, чтобы также разрешить целям платформы, которые будут извлекать хранилища для выбранной пользователем платформы (платформ), конфигурировать и создавать в соответствии с запросом.Эта часть - единственная, которую я не знаю, как настроить.

1 Ответ

0 голосов
/ 04 декабря 2018

Когда я делаю это, например, для программ, у меня есть макрос 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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...