Как экспортировать свойство CMake и установить его по-другому при установке (EXPORT…) - PullRequest
1 голос
/ 17 октября 2019

Я настраиваю систему сборки на основе CMake для старого фреймворка, написанного на C. Он состоит из одного двоичного файла, некоторых базовых библиотек и множества динамически связанных библиотек, которые построены на основе базовых библиотек. Все библиотеки требуют специального этапа генерации кода, который генерирует код C из файлов моделей, написанных на языке, специфичном для предметной области. Генератор кода считывает собственный файл модели библиотеки, а также файлы всех библиотек зависимостей.

Моя цель - структурировать эти библиотеки в нескольких проектах CMake («базовая структура», «библиотеки расширений» и проекты, специфичные для приложений). поддержка трех сценариев (с одной и той же кодовой базой):

  • Включение базового каркаса и библиотек расширений в качестве подпроектов (т.е. подмодулей git) в конкретный проект приложения. В этом случае эти проекты CMake включаются через add_subdirectory() и являются частью одного проекта CMake.

  • Сборка проектов, специфичных для приложения, на основе дерева сборки базовой платформы. Заголовочные файлы публичной библиотеки и файлы моделей для генерации кода следует читать из дерева исходных текстов.

    Этого можно достичь, используя export(EXPORT foo FILE FooFrameworkConfig.cmake) в CMakeLists базовой платформы и find_package(FooFramework) (с соответствующим CMAKE_PREFIX_PATH)включить свойства CMake целей сборки базовой платформы в проект приложения.

  • Сборка конкретных проектов приложения на основе дерева установки базовой платформы (без наличия доступных источников). Все необходимые общедоступные заголовочные файлы и файлы моделей для генерации кода копируются в дерево установки с помощью соответствующих правил install(…).

    Чтобы включить свойства CMake целевых объектов сборки базовой платформы в проект приложения, я попытался использоватьinstall(EXPORT foo FILE FooFrameworkConfig.cmake) в списках CMake базового фреймворка и уже упомянутых find_package(FooFramework) (с соответствующим CMAKE_PREFIX_PATH).

Чтобы управлять путями поиска модели для генератора кода, я ввелнастраиваемое свойство CMake для целевых объектов библиотеки (назовем его FOO_MODEL_PATHS). Это свойство содержит пути к файлам модели самой библиотеки и всех ее библиотек зависимостей. Я сделал это пользовательское свойство экспортируемым через set_property(TARGET ${OV_LIBRARY_NAME} APPEND PROPERTY EXPORT_PROPERTIES FOO_MODEL_PATHS).

К сожалению, я не могу заставить его работать для третьего сценария. В этом случае мне нужно, чтобы для этого настраиваемого свойства были установлены разные значения в файле экспорта дерева установки (генерируется install(EXPORT …)) и в системе сборки базовой платформы. Для внутренних свойств CMake для этой цели можно использовать выражения генератора $<BUILD_INTERFACE:…> и $<INSTALL_INTERFACE:…>. Однако для пользовательских экспортируемых свойств выражения генератора запрещены (см. документацию CMake и this commit ).

Итак, как я могу управлять путями поиска генератора кода вCMake и делиться ими с зависимыми проектами через EXPORT, но исправьте их в сгенерированном файле install(EXPORT …)?

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