Алло,
Я использую CMake в качестве системы сборки в одном из моих проектов, который довольно сложный. Проект включает в себя несколько библиотек и несколько приложений. Моя цель - сделать возможным следующее:
- Библиотеки могут быть построены по запросу пользователя (реализовано в кэшированной переменной CMake)
- Приложения создаются по запросу пользователя (см. Выше), но приложение может выбирать, какие библиотеки требуются, и создавать их, не выбирая их пользователем
- Это не должно изменять выбор кэшированного пользователя, для которого создаются библиотеки (чтобы отключить автоматическое создание библиотек, если сборка приложений отключена)
Моя компоновка системы сборки выглядит следующим образом: у меня есть родительский каталог, содержащий CMakeLists.txt, который добавляет библиотеки и приложения в качестве подкаталога. Каждая библиотека и приложение имеет свой собственный файл CmakeLists.txt, который определяет определяемые пользователем параметры конфигурации, которые будут храниться в кэше, целевые объекты, которые будут построены, и от каких других библиотек проекта это зависит. Приложения не обязательно находятся в следующем подкаталоге родительского каталога, но также могут быть на несколько уровней ниже, так что я не могу использовать PARENT_SCOPE, потому что родительский элемент не должен быть верхним родительским, а зависимости должны быть известны сверху.
Я попытался установить для GLOBAL свойства, такие как PROJECT_BUILD_SOMELIBRARY, установленный на on, и попытался получить их в CMakeLists.txt в SOMELIBRARY, чтобы решить, строить или нет, но свойства не передавались в библиотеку, поэтому он никогда не создавался, даже если на самом деле это было бы необходимо, потому что другая библиотека или приложение указали, что оно зависит от этой библиотеки. Использование LIST, содержащего имя каждого приложения или цели библиотеки, в зависимости от библиотеки и кэширования, которое внутри тоже не работает.
Подводя итог этим многим словам, я ищу способ повлиять на CMakeLists в каком-либо подкаталоге, ответственном за построение библиотеки с помощью CMakeLists в каком-либо другом подкаталоге (который не обязательно является тем же уровнем подкаталога, что и другой подкаталог). ) для создания этой библиотеки, даже если пользователь не указал ее явно с помощью параметра конфигурации при вызове cmake.
Кто-нибудь знает, как этого можно достичь или это невозможно с помощью CMake? Есть ли предложения для других подходов к этой проблеме, которые, однако, включают использование CMake? Знаете ли вы о какой-либо другой системе сборки, которая могла бы комфортно обрабатывать эти требования?
Большое спасибо,
crispinus