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.