Структура и зависимости кросс-платформерного проекта CMake?
Какой правильный способ подключения внешних зависимостей в проект CMake. В некоторых проектах и примерах я видел, что люди подключали зависимости через подмодули git, в других всякие find-скрипты, а ещё есть External Project и пакетные менеджеры (conan).
И так, проект кросс-платформерный (Windows, Android, в перспективе iOS, macOS, Linux и другие). Проект с закрытым кодом, так что пользователь получает скомпилированный бинарник. При этом, конечно, очень важную роль играет кросс-компиляция. Некоторые платформы имеют отдельные зависимости (к примеру GLFW).
Один из моих вариантов решения проблемы:
Написать скрипт (скорее всего на python, ибо нужна возможность компилировать как из под Windows, так и из под Linux), который будет собирать все зависимости под конкретную платформу, раскидывать по папочкам и генерировать скрипт с путями ко всем нужным библиотекам.
Один из моих вариантов решения проблемы:
Написать скрипт (скорее всего на python, ибо нужна возможность компилировать как из под Windows, так и из под Linux), который будет собирать все зависимости под конкретную платформу, раскидывать по папочкам и генерировать скрипт с путями ко всем нужным библиотекам.
Поразительно, но вы в точности описали пакетный менеджер Conan (о котором упоминали).
Написать скрипт (скорее всего на python, ибо нужна возможность компилировать как из под Windows, так и из под Linux)
Конан написан на Питоне и распространяется как pip-пакет.
который будет собирать все зависимости под конкретную платформу, раскидывать по папочкам
Together, these folders are the local cache. This is where package recipes and binary packages are stored and cached, so they don’t have to be retrieved again.
и генерировать скрипт с путями ко всем нужным библиотекам
Generators are specific components that provide the information of dependencies calculated by Conan in a suitable format for a build system. They normally provide Conan users with a conanbuildinfo.XXX file that can be included or injected to the specific build system.