LINUX.ORG.RU

генерирование (make-)файлов на питоне

 , ,


0

4

интересно вот, как уважаемые лоровцы генерируют всякие-разные Makefiles на питоне.

В общем случае задача такова — есть некоторая структура проекта, включающего в себя разные типы файлов. Есть хренова туча архитектур ПЛИС, на которых этот проект должен работать, и разумеется, каждый вендор лепит свои утилиты для синтеза и place & route. Делать скрипты для сборки всего из Makefile неудобно (это ж бесконечные echo «bla-bla-bla $(SOME_VAR)» >> build.tcl), а результат люто тормозит, например, в mingw (там, где каждый вызов шелла «дорогой»).

На питоне, в принципе, дергать шелл не нужно, но уж как-то больно уродливо смотрятся бесконечные либо %, либо format()'ы.

Подскажите феншуйный метод.

★★★★★

this

bla-bla-bla $(SOME_VAR)» >> build.tcl

build.tcl

tcl

WRG ★★★★
()

но уж как-то больно уродливо смотрятся бесконечные либо %, либо format()'ы.

Для таких случаев придумали шаблонизаторы. Гугли Jinja2 и далее по связанным понятиям.

Deleted
()
Ответ на: комментарий от Deleted

Jinja2

во, а это уже ближе к тому, что хочется

demidrol ★★★★★
() автор топика

как-то больно уродливо смотрятся бесконечные либо %

А что плохого в %?
result_str = template_str % substitution_dict
Что в этом нефэншуйного?

Мне это казалось всегда нормальным решением. Считываем в template_str шаблон (из отдельного файла), делаем замену всего и вся по словарю одним %, получаем содержимое готового файла и пишем его.

prischeyadro ★★★☆☆
()
Последнее исправление: prischeyadro (всего исправлений: 1)
Ответ на: комментарий от prischeyadro

а всякие условные штуки? а циклы? Хочется всю эту логику вынести именно в шаблон, а не оставлять в программе.

demidrol ★★★★★
() автор топика
Ответ на: комментарий от demidrol

Я велосипедил руками, да. Перед заменой прогонял через парсер, который искал в шаблоне нужные метки и по ним разворачивал циклы и выкидывал ненужные блоки. Вероятно, был не очень прав, и стоило посмотреть что-то готовое.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от demidrol

можно, но опять же — как это сделать не уродством типа построчной записи в файл?

В Tcl есть метапрограммирование. Тебе нужно чтобы твоя фигня собиралась на множестве разных компиляторов? А как ты определяешь, какой компилятор нужен?

А запись можно и не построчную, а вначале сформировать всё содержимое файла, потом записать.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.