CMake: как лучше всего создать несколько (необязательных) подпроектов?

Представьте себе общий проект с несколькими компонентами:

  • basic
  • io
  • web
  • app-a
  • app-b
  • app-c

Теперь предположим, что Интернет зависит от io, который зависит от базового, и все эти вещи находятся в одном репо и имеют CMakeLists.txt, чтобы создать их как общие библиотеки.

Как мне настроить все, чтобы я мог собрать три приложения, если каждое из них является необязательным и может отсутствовать во время сборки?

Одна из идей состоит в том, чтобы иметь пустой каталог «apps» в главном репо, и мы можем клонировать в него любые репозитории приложений. Наш основной файл CMakeLists.txt может использовать GLOB для поиска всех каталогов приложений и их создания (не зная заранее, сколько их будет). Проблемы с этим подходом включают:

  • По-видимому, CMake не выполняет повторную замену глобуса, когда вы просто говорите make , поэтому, если вы добавляете новое приложение, вы должны снова запустить cmake .
  • ] Он накладывает определенную структуру на человека, выполняющего сборку.
  • Неочевидно, как можно создать два клона одного приложения и построить их оба отдельно на основе одной и той же сборки библиотеки.

Общая концепция похожа на традиционную. рекурсивный проект CMake, но модули нижнего уровня не обязательно заранее знают, какие из них будут их использовать. Тем не менее, я не хочу требовать от пользователя установки библиотек нижнего уровня в фиксированное место (например, / usr / local / lib ). Однако я хочу, чтобы один вызов make заметил изменения зависимостей во всем проекте, так что если я создаю приложение, но изменяю одну из низкоуровневых библиотек, все будет соответствующим образом перекомпилировано.

20
задан John Zwinck 23 June 2011 в 19:39
поделиться