Я пытаюсь создать проект с открытым исходным кодом C ++. Я хочу, чтобы его было как можно проще собрать, но в то же время кроссплатформенный.
Мне не нужны графические или тяжелые библиотеки, такие как boost или Qt, поэтому я остановился на GitHub, CMake и LibSourcey.
Моя проблема в том, что я не могу найти способ упростить сборку моего проекта в Windows, которая является моей средой разработки.
Как я могу «сделать установку» библиотеки в Windows для использования в моем проекте? Должен ли я вообще установить его в Windows?
Можно ли автоматически загружать, создавать и связывать его?
В Windows, кроме установщика, я также хочу сделать переносную версию, поэтому не хочу жестко закодировать пути к библиотекам.
Я предполагаю, что на некоторых платформах, таких как Linux, библиотеки создаются раздельно и упаковываются сопровождающими. Так что я не должен просто связывать свои копии.
Итак, мой вопрос:
Как я могу создать проект, который является кроссплатформенным и простым в создании, и каковы лучшие практики?
Вы можете создать 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
и нажмите кнопку сборки, вот и все.
использование Babun. Это оболочка для Cygwin, и она прекрасно работает для всего, что мне нужно, даже для компиляции с помощью cmake.
В качестве альтернативы, вы можете использовать premake, который использует lua в качестве системы конфигурации и прекрасно работает на Windows.
Не существует элегантного кроссплатформенного способа, так как идея «make install» не существует в Windows, поэтому использование cmake install там не определено. Для чего-то, что должно помочь кроссплатформенности, я чувствую, что это недостаток.
Мое решение состоит в том, чтобы написать собственный _INSTALL, который принимает те же аргументы, что и cmake install, а затем в Linux он просто вызывает install, а в Windows он выполняет команду add_command, которая выполняет копирование после сборки в пути установки, что выполняет то же самое. По сути, _INSTALL ведет себя так, как вы ожидаете от кроссплатформенной команды установки. Можете поделиться своим функционалом _INSTALL, если есть интерес.
_INSTALL помещается в Helper.cmake и включается во все мои CMakeList.txt для моих проектов, поэтому все, что мне нужно сделать, это вызвать его, и сгенерированные файлы lib / inc волшебным образом появятся как для win, так и для linux.