Предполагаемый вариант использования для команды экспорта () CMake

#c #c #cmake

#c #c #cmake

Вопрос:

Команда установки (TARGETS) CMake поддерживает указание имени экспорта, чтобы вы могли позже использовать команду instal (EXPORT) для создания файла cmake, который можно найти с помощью вызова find_package() в каком-либо другом проекте. Это полезно для создания файла интеллектуального модуля cmake независимым от платформы способом.

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

Если, например, у меня есть проект, который включает в себя другой проект в качестве подмодуля git, почему бы мне просто не добавить проект подмодуля с помощью команды CMake add_subdirectory()?

Мой вопрос заключается в следующем: если команда export () не предназначена для ситуаций, подобных описанным выше (подмодули git или что-то эквивалентное), для чего она предназначена? Если он предназначен для описанной выше ситуации, почему он превосходит add_subdirectory()?

Комментарии:

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

2. Достаточно справедливо, но если зависимый проект не включен в качестве подмодуля, и если он использует команду export() для создания файла FindMyLib.cmake в своем дереве сборки, как зависимый проект должен знать, где найти дерево сборки (чтобы он мог найти файл, который импортирует все целевые объекты из зависимого проекта)?

3. @SumDood: Вы забыли о export(PACKAGE) потоке команд, который «публикует» пакет из дерева сборки, поэтому его можно найти с помощью find_package() .