Продвинутая сборка исходного кода — просто, как в пакетном менеджере.
python make.py build revolution
Революция в сфере управления исходным кодом! MakePy — это свободный каркас для языка Python, с помощью которого вы можете производить широкий спектр операций с вашим исходным кодом и другими файлами на различных операционных системах и процессорных архитектурах. Отличная альтернатива программам Make, CMake и подобным.
Сценарий сборки программируется на языке Python — Тьюринг-полноценном языке программирования общего назначения, позволяющем программировать в процедурном, функциональном, объектно-ориентированном и других стилях. Больше не возникнет задач, которые сложно или невозможно решить с помощью собственных языков программирования известных программ сборки.
С помощью всего одной команды производится полный цикл сборки: от компиляции исходного кода до упаковки пакетов. Достигается высокий уровень автоматизации.
Интерфейс командной строки тоже может быть удобным. Опыт использования данной системы сборки напоминает пакетный менеджер. Цели сборки делятся на пути (файлы и папки) и пакеты. Сначала указывается действие, выполняемое над путями и пакетами, а затем перечисляются пути и пакеты.
./make.py [действие] {<путь или пакет>|path:<путь>|package:<пакет>} [...]
Каркас является объектно-ориентированным. На основе имеющихся классов можно создавать свои с самыми разными содержанием и поведением. Можно использовать как встроенный инструментарий, так и добавленный самостоятельно. Можно добавлять свои действия и свои типы целей.
- Создание папок
- Автоматическое добавление целей для автоматического создания папок
- Создание символьных ссылок
- Компиляция объектных файлов
- Сборка исполняемых файлов
- Сборка статических библиотек
- Сборка разделяемых библиотек
- Генерация статических интерфейсов для разделяемых библиотек «.dll»
- Извлечение списков символов («.def»-файл) из разделяемых библиотек «.dll»
- Очистка рабочей папки от сгенерированных файлов и папок с автоматическим определением удаляемых файлов и папок
- Установка файлов и папок с предварительной установкой пакетов-зависимостей
- Удаление установленных файлов и папок с автоматическим определением удаляемых файлов, папок и зависимых пакетов
- Упаковка сгенерированных файлов и папок в архив или пакет
На данный момент встроенный функционал каркаса поддерживает языки программирования C и C++, компиляторы GCC и Clang и операционные системы GNU/Linux и Windows. Возможно упаковать пакет Debian («.deb») на дистрибутиве GNU/Linux, основанном на Debian, с помощью инструментов пакета debhelper
(также нужно использовать файл «sample debian rules», находящийся в репозитории, в качестве файла «debian/rules»).
Добавляем файл «makepy.py» из репозитория в папку вашего проекта или в папку с модулями Python.
Создаём в папке проекта сценарий сборки и называем его, например, «make.py».
#!/usr/bin/python3 -B
from makepy import *
class Hello_Revolution(MakePy):
def main(self, defines):
Package(self, "build", "revolution", {"build": Dependencies([self.executable("revolution")])})
Executable_C(self, "revolution", "main.o")
Object_C(self, "main.c")
Clean(self, "revolution")
Hello_Revolution("revolution", "build", "package").make()
Запускаем сценарий сборки.
$ ./make.py
>python make.py
src
main.c
make.py
makepy.py
bin
revolution{.exe}
obj
main.o
src
main.c
make.py
makepy.py
Для подробного ознакомления с каркасом введите следующие команды:
>>> import makepy
>>> help(makepy)
А также введите команду:
$ ./make.py --help
>python make.py --help
Сборка программы из исходного кода должна быть доступной для пользователя.
Вы тоже так считаете? Тогда используйте MakePy!
Определённо, это ещё не предел совершенства. Вот список вещей, которые ещё предстоит добавить.
- Более подробная документация
- Улучшение стабильности и безопасности использования
- Улучшение восприятия кода сценария сборки
- Многопоточность
- Шкала прогресса
- Поддержка других компиляторов
- Поддержка других языков программирования
- Поддержка других операционных систем
- Упаковка пакетов других типов
- Анализ исходного кода (автоматическое определение зависимостей)
- Обратная совместимость
- Добавление в репозиторий PyPI
- Мало ли что ещё