Подсказки относительно того, как развернуть код C++ для работы каждого где

Я не говорю о создании портативного кода. Это - больше вопрос распределения. У меня есть проект среднего размера. Это имеет несколько зависимостей от общих библиотек (например, openssl, zlib, и т.д.). Это компилирует прекрасный на моей машине, и теперь пора дать его миру.

По существу создайте разработку в его самом прекрасном. Я хочу сделать установщики для Windows, Linux, MacOSX, и т.д. Я хочу сделать загружаемый шар tar, который заставит код работать с a ./configure и a make (вероятно, через autoconf). Это было бы обледенение на пироге, чтобы иметь сделать опцию, которая создаст установщики.. возможно, даже кросс-скомпилируйте так установщик Windows, мог быть создан в Linux.

Какова лучшая стратегия? Где я могу ожидать проводить большую часть времени? Главный фокус должен быть autoconf или является там другими инструментами, которые могут помочь?

18
задан User1 21 March 2010 в 05:27
поделиться

3 ответа

Я бы порекомендовал CMake . Преимущества:

  • Его очень легко использовать для создания простых и сложных проектов со статическими библиотеками, динамическими библиотеками, исполняемыми файлами и их зависимостями.
  • Он не зависит от платформы и генерирует файлы сборки и / или файлы проекта ide для большинства компиляторов и IDE.
  • Он абстрагирует различия между Windows и unix, например, "libShared.so" и "Shared.dll" называются "Shared" (cmake обрабатывает различия в именах для каждой платформы), если Shared является частью вашего проекта, он сортирует зависимость, если не предполагает, что она находится в пути компоновщика.
  • Он исследует систему пользователей для компилятора и сторонних библиотек, которые требуются, затем вы можете при желании удалить компоненты, когда сторонние библиотеки недоступны, или отобразить сообщение об ошибке (он поставляется с макросами для поиска наиболее распространенных сторонних библиотек).
  • Его можно запустить из командной строки или с помощью простого графического интерфейса, который позволяет пользователю изменять любой из параметров, которые были обнаружены выше (например, компилятор или версия сторонней библиотеки).
  • Он поддерживает макросы для автоматизации общих шагов.
  • Существует компонент под названием CPack, который позволяет вам создать установщик, я думаю, это просто командная строка make install (я не использовал ее).
  • Компонент CTest интегрируется с другими библиотеками модульного тестирования, такими как ускоренный тест или тест Google.

Сейчас я использую CMake для всего, даже для простых тестовых проектов с Visual Studio.

Я никогда не использовал autotools, но многие другие пользователи отметили, что cmake проще в использовании.По этой причине проект KDE перешел на cmake из autotools.

18
ответ дан 30 November 2019 в 08:52
поделиться

Продукт, над которым я работаю, не слишком отличается от этого. Мы используем систему сборки на основе autoconf, и она работает очень хорошо.

На сегодняшний день вы будете проводить больше всего времени в поддержке пользователей. У пользовательских систем будут всевозможные морщины, которых вы не ожидаете, пока они не столкнутся с ними, и вам нужно будет добавить дополнительные параметры конфигурации для их поддержки. Со временем мы добавили опции для установки путей include и lib для каждой библиотеки, от которой мы зависим; мы добавили параметры для изменения флагов компиляции, чтобы обойти различные странные сбои в различных версиях этих библиотек (или изменения API от одной версии к другой, чем требует изменений в нашем коде), мы добавили обходные пути для того факта, что некоторые библиотеки BLAS используют интерфейс C, а некоторые используют интерфейс Fortran, поэтому, хотя они теоретически являются реализациями одной и той же библиотеки, они делают несколько вещей немного по-другому, и так далее. Вы не можете предвидеть все это заранее, и это также требует документирования, чтобы пользователи могли выяснить, какие параметры установить.

Да, и установщики действительно доставляют неудобства, потому что они обычно зависят от ОС (если только это не сценарий оболочки и вам не требуется CygWin), а места для установки обычно зависят от ОС и так далее. Это еще одна область, которая потребует времени - либо для создания хорошего установщика, либо для поддержки пользователей в настройке вручную.

Настройка кросс-компиляции, по моему опыту, того стоит (по крайней мере, для случая перехода от Linux к Windows; не уверен насчет MacOS / X) - намного проще, чем пытаться сохранить несколько разных систем сборки в синхронизировать.

В качестве альтернативы есть возможность, которую проект OpenFOAM использует для своей довольно большой библиотеки C ++, которая заключается в распространении ее вместе с «одобренным» компилятором G ++ и пакетами для всех других компонентов, чтобы они не приходится беспокоиться о разных компиляторах и так далее. Но это действительно работает только на одной ОС. Я предполагаю, что версия для Windows / MacOSX должна предоставлять предварительно настроенные образы VMWare. В некоторых случаях для этого есть что сказать ....

3
ответ дан 30 November 2019 в 08:52
поделиться

Используйте автоинструменты, большинство пользователей знакомы с ними (т.е. они знают, что нужно запустить ./configure && make && make install)

  • Создайте .tar.gz с помощью make dist, протестируйте его, убедитесь, что он компилируется и работает на нескольких системах.
  • Для Linux/Unix/Cygwin не предоставляйте инсталляторы... исходный tar.gz будет более чем достаточно. В любом случае, каждый дистрибутив Linux имеет свои собственные правила упаковки и большинство из них знают, что нужно использовать сборки autoconf, пользователи могут иметь 32 или 64 битные системы или даже работать на PPC или Sparc - так что не беспокойтесь.

    Возможно, стоит создать один deb или rpm для большинства популярных систем, но не более того...

  • Для Windows (родной, не cygwin) предоставьте двоичные файлы. Установка Migw+auto довольно болезненна, а пользователи windows обычно больше "next->next->next" пользователи, чем "wget/tar/configure/make/make-install" пользователи" Предоставьте zip или какой-нибудь установщик, есть некоторые FOSS установщики.

    Помните, что бедные пользователи Windows по умолчанию не имеют zlib или openssl... Так что вам придется поставлять их вместе с пакетом.

О CMake...

Если вы ориентируетесь в основном на платформу Windows или готовы поддерживать MSVC, то, вероятно, вам стоит рассмотреть его. В противном случае, автоинструменты обеспечивают хорошую альтернативу дистрибуции и сборке.

0
ответ дан 30 November 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: