#c #installation #package #distribution
#c #установка #пакет #распространение
Вопрос:
Я работаю над простым инструментом командной строки на c . Половина для забавного процесса обучения, а половина для распространения среди друзей / коллег и т.д.
Я предполагаю, что самый простой способ сделать его распространяемым — это просто упаковать исходный код в установочный скрипт — кто-нибудь может указать мне хорошее руководство по его настройке? Другими словами, что должен включать скрипт, чтобы скомпилировать программу, разместить файлы в нужных местах * и сделать ее исполняемой из любого каталога командной строки?
-
- Например. Я знаю, что скомпилированный двоичный файл должен находиться в /usr / local/bin / , но если я пишу в текстовый файл и получаю к нему доступ (например), куда он должен идти? Как насчет файла, в котором хранятся настройки / configuration-parameters?
Я работаю на Mac osx, так что это было бы отправной точкой, но переносимость на Windows, Linux и т.д. Была бы отличной.
Комментарии:
1. Лучше всего для Windows использовать установщик, подобный Innosetup на jrsoftware.org/isinfo.php
Ответ №1:
Вы можете использовать CMake для создания кроссплатформенной системы сборки, и вы можете использовать его функцию CPack (Wiki here) для создания двоичных пакетов. Только пакеты. Сначала вы создаете скрипт сборки, который запускается и устанавливается на каждой платформе (что CMake делает настолько простым, насколько можно ожидать). Затем вы запускаете CPack для создания пакета, который включает только ваши двоичные файлы.
Здесь есть хороший учебник, который охватывает базовый процесс cmake (включая команды установки).
CMake обычно считается более простым, чем autoconf (и имеет лучшую поддержку Windows), но у каждого есть свои сильные стороны.
Ответ №2:
Не предполагайте, что пользователь, устанавливающий программу, имеет root-доступ. Подскажите или укажите параметр командной строки, например —install-prefix=/home/user / apps, чтобы указать, куда устанавливать.
Я НЕНАВИЖУ программы, которые устанавливают дерьмо в /usr /local. Если вы сделаете это, вам лучше всего заключить это в .rpm или .deb или любой другой пакет платформы, чтобы ваше приложение можно было аккуратно удалить.
Я бы посоветовал проверить autoconf
Комментарии:
1. У меня сложилось впечатление (примечание: только впечатление), что configure, make и т.д. В конечном итоге Просто вставляют скомпилированный двоичный файл в usr / local и любые другие файлы в те места, которым они принадлежат. Потому что моя программа невероятно проста (пара файлов, несколько сотен строк кода) Я думал, что все это будет излишним. Это вообще делает его легко деинсталлируемым? Какова ваша мотивация, почему вы не хотите, чтобы что-то устанавливалось в / usr / local?
2. autoconf позволяет указать —install-prefix, который дает вам root для вашего приложения и его файлов конфигурации. В общем, когда я развертываю приложения, зависящие от пользовательских утилит, я всегда сохраняю их вместе. Таким образом, я всегда могу сразу увидеть зависимости, которые я добавил. Если я когда-нибудь перейду на новые хосты, я не облажаюсь, пропустив что-то. В настоящее время я бы использовал платформы развертывания, такие как Puppet или CFEngine, для жесткого кодирования этих зависимостей, так что, может быть, это просто 17 лет идеологической обработки и привычки?
3. Автоконфигурация сама по себе не выполняет «упаковку» для удаления. Это то, что относится к rpmbuild или любому другому эквиваленту debian.