CMake & quot; make install & quot; или включая библиотеку в Windows

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

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

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

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

10

Решение

Вы можете создать git submodule в вашем Git репо с путем, например
contrib/LibSourcery и URL для GitHub репо LibSourcery, потому что LibSourcery использования cmake ты только
нужно добавить такую ​​строчку в ваш CMakeLists.txt: add_subdirectory(contrib/LibSourcery)

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

1

Другие решения

использование Babun. Это оболочка для Cygwin, и она прекрасно работает для всего, что мне нужно, даже для компиляции с помощью cmake.

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

1

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

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

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

0
По вопросам рекламы [email protected]