CMake "make install" или включая библиотеку в окнах

Я пытаюсь создать проект с открытым исходным кодом на С++. Я хочу, чтобы это было так же легко построить, насколько это возможно, но в то же время перекрестная платформа. Мне не нужны gui или тяжелые библиотеки, такие как boost или Qt, поэтому я решил использовать GitHub, CMake и LibSourcey. Моя проблема заключается в том, что я не могу найти способ упростить мой проект в окнах, что является моей средой разработки. Как я могу "сделать установку" библиотеки в Windows для использования в моем проекте? Мне даже нужно установить его в windows? Можно ли загружать, строить и связывать его автоматически?

В окнах, помимо установщика, я также хочу сделать переносимую версию, поэтому не хочу никаких жестко закодированных путей библиотеки.

Я предполагаю, что на некоторых платформах, таких как Linux, библиотеки создаются отдельно и упаковываются сопровождающими. Поэтому я не должен просто собирать свои собственные копии.

Итак, мой вопрос: Как я могу создать проект, который является кросс-платформенным и прост в построении, и каковы наилучшие методы?

Ответ 1

Вы можете создать git submodule в своем репозитории git с помощью пути, например contrib/LibSourcery и url для gythub repo LibSourcery, поскольку LibSourcery использует cmake, вы просто добавьте такую ​​строку в свой CMakeLists.txt: add_subdirectory(contrib/LibSourcery)

Итак, человек, который хочет использовать ваш код, просто git clone --recursive url для получения всего вашего кода и зависимостей, после этого он запускает cmake -G, чтобы создать проект для IDE по своему выбору (включая MSVС++, конечно), открыть проект в IDE и нажать кнопку сборки, чтобы все.

Ответ 2

Используйте babun. Это оболочка для cygwin, и она отлично работает для всего, что мне нужно, даже для компиляции с cmake.

В качестве альтернативы вы можете использовать premake, который использует lua как конфигурационную систему и отлично работает в Windows.

Ответ 3

Нет элегантного кросс-платформенного способа, так как идея "make install" не существует в Windows, поэтому использование cmake install undefined есть. Для чего-то, что должно помочь кросс-платформенному, я чувствую, что это недостаток w cmake.

Мое решение состоит в том, чтобы написать пользовательский _INSTALL, который принимает те же аргументы, что и cmake install, а затем в Linux он просто вызывает установку, а в Windows - команду add_command, которая делает копию после сборки на пути установки, которая выполняет то же самое. В принципе, _INSTALL ведет себя так, как вы ожидаете, что команда кросс-платформенной команды будет вести себя. Могу поделиться своей функцией _INSTALL, если есть интерес.

_INSTALL помещается в Helper.cmake и включен во все мои CMakeList.txt для моих проектов, поэтому все, что мне нужно сделать, это вызвать его, а созданные файлы lib/inc волшебным образом появятся как для win, так и для linux.