#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()
.