2016-05-11 8 views
10

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

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

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

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

+0

Я не уверен, что вы говорите о поиске решения для своего процесса разработки или для выпуска релизов или того и другого? [msys2] (https://sourceforge.net/projects/msys2/) можно использовать под окнами для управления вашими необходимыми пакетами. –

+0

Я столкнулся с той же проблемой в последнее время, msys2 отлично смотрится, но я предпочитаю использовать встроенную toolchain для разработки Windows. –

+0

Я заглянул в msys, но хочу, чтобы он был родным. С msys еще сложнее скомпилировать для x64 и с надлежащей поддержкой Unicode. – denisps

ответ

1

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

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

+0

Это не работает. Я не знаю, что я делаю что-то неправильно, или LibSourcery не поддерживает этот тип включения. Я включил его в папку contrib как подмодуль, но я все еще не уверен, что это правильный способ включить библиотеку на платформах Unix. Будет ли ссылка на установленную библиотеку, если она доступна? Как это добавить? – denisps

+0

@denisps cmake также поддерживает внешние проекты таким образом https://cmake.org/cmake/help/v3.0/module/ExternalProject.html – fghj

+0

Этот ответ кажется самым близким. К сожалению, LibSourcery, кажется, сломан и потенциально оставлен. Я был бы признателен, если бы вы подробно остановились на том, как учесть случай, когда я связываюсь с библиотекой, которая уже установлена, например, Linux. – denisps

1

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

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

0

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

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

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