Мне интересно, как управлять зависимостями внешнего проекта. Скажем, у меня есть три проекта, каждый из которых в другом хранилище:CMake: Зависимости внешнего проекта
- Ключевых: библиотека экспортирует много полезных вещей.
- Lib1: библиотека с некоторыми конкретными классами (зависит от Core).
- Исполняемые: использует материал из Ядра, а также от Lib1.
Каждый проект с его CMakeLists.txt. Использование find_package и определение путей на CMake я могу построить каждый проект без проблем и установить его (я последовал this tuto строить .cmake файлы для библиотек)
Теперь я пытаюсь сделать этот процесс как можно проще и Я представляю макрос ExternalProject_Add, таким образом, людям нужно будет только клонировать Executable репозиторий и с помощью файлов CMake Lib1 и Core также загружаются, скомпилированы и связаны.
Проблема заключается в том, что Исполняемые и Lib1 зависит от Ядра, но я хочу, чтобы быть клонирован (и компилируется) только один раз. Вот проблема:
- В Исполняемые CMake клоны и строит Ядро с особенностями ExternalProject_Add.
- Затем Cmake клоны Lib1 и ищет Ядра, но он не был уже установлен, так что нет ядра-targets.cmake файла (ядра-config.cmake доступен) ... и здание не может ...
Я не знаю, есть ли документированный способ работы с этим видом дерева проекта или я пишу какое-то обходной путь, когда ядра входят в зависимости внешний профессионал ject, чтобы избежать использования файла core-target.cmake.
Спасибо!
Решение
я понял, что при использовании ExternalProject_Add скачивает, строит и установить проект так, в установочном-папке, у меня уже есть все файлы, необходимые для компиляции его иждивенцам.
Так что я могу справиться с этой проблемой, выполнив следующие действия (также для заказа сборки):
- * ExternalProject_Add * для Ядро
- * ExternalProject_Add * для Lib1 прохождение сердечника INSTALL_DIR в качестве аргумента
- ... и Исполняемый файл.
Две альтернативы, которые я вижу: (1) создают один проект CMake для всех ваших библиотек и исполняемых файлов; (2) make 'Executable' зависит только от' Lib1'. –
(скопировано как решение) Я понял, что при использовании ExternalProject_Add он загружает, строит и УСТАНАВЛИВАЕТ проект, поэтому в папке установки у меня уже есть все файлы, необходимые для компиляции его иждивенцев. Таким образом, я могу управлять этой проблемой, следуя этим шагам (также для порядка построения): * ExternalProject_Add for Core * ExternalProject_Add для Lib1, передающий Core install dir в качестве аргумента. * .. и Исполняемый файл. (скопирован в вопрос) – jgsogo