Я создаю приложение, которое будет работать в системе Linux. В настоящее время процесс сборки состоит из простого Makefile, который уже слишком сложный.Основы разработки и развертывания приложения Linux
Теперь я догадываюсь, что мне не хватает базового понимания того, как правильно разработать приложение Linux. Информация Я нашел:
- Приложение должно каким-то образом иметь цель
make install
, которая перемещает все файлы в нужное место. - Обычные места для установки приложения:
/usr/bin
или/usr/local/bin
. - Файлы данных должны быть помещены в
/usr/share
или/usr/local/share
соответственно. Нужно иметь возможность настроить префикс пути где-то в процессе сборки.
Имея эту информацию, я теперь интересно:
- Как настроить префикс правильно: Если процесс сборки взять путь в качестве параметра и жёстко, что в коде? Это также жизненно важно для тестирования - я должен каким-то образом создать исполняемый двоичный файл, который просто использует файлы данных из исходной папки, не требуя, чтобы все было установлено где-то.
- Должен ли я использовать autotools или cmake или что-то еще? autotools по крайней мере, кажется, не просто система сборки, но также обрабатывает конфигурацию префикса и т. д. Это верно? Как сравнивать cmake?
- Это контрактная работа, должен ли я действительно заботиться об этих вещах? Приложение будет работать только в системах клиента, которые четко определены, поэтому я мог бы избавиться от предоставления папки, содержащей все необходимые файлы, и приложение могло быть выполнено из этой папки.
Таким образом, я в основном ищу хорошие ресурсы, которые дают мне обзор возможностей и общей практики, а также позволяют мне принять обоснованное решение о том, как и как настроить процесс сборки и развертывания.
Использование autotools/cmake/etc. значительно упрощает часть вашего процесса и включает флаги, чтобы помочь с установкой инсталляционных префиксов. Какая система для использования в значительной степени зависит от личного вкуса. Я использовал как autotools, так и cmake, и нашел их в значительной степени эквивалентными по функциональности. –