Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Системы сборки
Шарага > Soft - НЕ железо > Программирование МК
MrYuran
Попробовал запустить Scons.
Установил, написал дефолтный сценарий Sconstruct
Цитата
Program('main/main.c')

Запустил.

Код
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(34) : e
rror C2054: требуется "(" после "inline"
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(35) : e
rror C2085: LmSensorPower: отсутствует в списке формальных параметров
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\measure\hardware.h(35) : e
rror C2143: синтаксическая ошибка: отсутствие ";" перед "{"
d:\work\projects\mark-9010_v4\program\9010u_430_04_00\main\../measure/measure.h(
13) : fatal error C1083: Не удается открыть файл include: stdbool.h: No such fil
e or directory
scons: *** [main\main.obj] Error 2
scons: building terminated because of errors.


Н-да... У него собственное вИдение на си...
Курим дальше.

PS: проект полностью рабочий:
Код
Build project 9010U_430_01_00 - OK.
   text    data     bss     dec     hex filename
  14528      80     771   15379    3c13 9010U_430_01_00.elf
msp430-gcc (GCC) 3.2.3
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Это make all

Наверно, надо для начала компилятор ему указать.
MrYuran
Ага, пошло!... по трубам...
Код
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
In file included from main\/../measure/measure.h:8:0,
                 from main\main.c:6:
c:\mspgcc_new\bin\../lib/gcc/msp430/4.5.3/../../../../msp430/include/io.h:1:2: w
arning: #warning <io.h> is deprecated, please include <msp430.h>
In file included from main\/../measure/measure.h:9:0,
                 from main\main.c:6:
main\/../measure/hardware.h: In function 'LmSensorPower':
main\/../measure/hardware.h:41:17: error: 'P6OUT' undeclared (first use in this
function)


Кажися, начал понимать понемногу. Вот бы ещё доку концентрированную, а не эти размазанные в пространстве хтмлки...
_pasha
А как обойти такую вещь:
Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. alcoholic.gif
ЗЫ
Вот где нужен что-то типа visual make!
MrYuran
Цитата(_pasha @ 12.3.2012, 9:41) *
А как обойти такую вещь:
Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. alcoholic.gif

Ну так установить его стационарно, а потом на флешку вместе с пытоном.
Как я понял, он просто в папку Scripts добавляется.
Там всех делов на полметра.
_pasha
Ага. Но странно, в инсталляхе не догадались до того, чтобы указать питоноПутю иммедиатедли.
MrYuran
Вчера ещё пробовал по наводке с элха Clang, впечатлило, хоть и не пошло.
Чувствуется, что торжественная монополия GNU на свободные средства разработки заканчивается.
И это хорошо.
dxp
Чессно сказать, дефолтный вариант сразу выкинул фтопку и написал полностью свой (не так там и много). Функционал automake мне не нужон, зато нада полную управляемость. Поэтому всё описал сам, начиная с конфигурационных переменных и заканчивая билдерами. Полёт отличный (уже лет пять, если не больше). О make вспоминаю, как страшном сне.
MrYuran
Может, дока какая монолитная есть?
В виде pdf
Особенно на API
dxp
Цитата(MrYuran @ 12.3.2012, 14:57) *
Может, дока какая монолитная есть?
В виде pdf
Особенно на API

Когда изучал это дело, там была пара HTML'ей - один, типа, user's guide, второй вроде reference manual. По ним всё достаточно успешно изучалось. Этот же контент находился и в pdf'никах, но они мне показались менее удобными.

А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы.
MrYuran
Цитата(dxp @ 12.3.2012, 15:47) *
А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы.

Ага, слона-то, как всегда, и не приметил smile.gif
Просто pdf удобнее оффлайн на планшетке изучать.
Кстати, там у меня и питонодвижок стоит, осталось только GCC собрать под андроид smile.gif

От бумаги тоже отвык. Читая последний раз Пелевина с бумажного носителя, отметил, насколько удобнее 7" мобильный планшет.
_pasha
Что-то я продолбоюбил.
Есть же обычный архив, нафига мне инсталлер.. Сегодня попробую, наконец-то
MrYuran
Цитата(_pasha @ 14.3.2012, 8:54) *
Сегодня попробую, наконец-то

А я так уже.
make all в настройках IDE заменил на scons

Потихоньку допиливаю Sconstruct, который вполне на makefile становится похож, за исключением закорючек в описаниях целей
Все зависимости находит сам, достаточно только центровой main обозначить.
MrYuran
dxp, а как указать сконсу разные цели сборки?
Типа release и debug?

Идейка тут появилась, насчет экспресс-тестирования.
Например, прилепляю сбоку рабочего проекта набор тестов testMain.c и компиляю Program('testMain.c').
Ничего лишнего, а зависимости само установит.
Понятно, что есть специальные тестовые примочки, только надо все осваивать, а тут вроде все понятно и прозрачно.
dxp
Цитата(MrYuran @ 16.3.2012, 18:13) *
dxp, а как указать сконсу разные цели сборки?
Типа release и debug?

Цели указывыются через env.Alias. Не знаю, как там у вас получится (не знаю, что у env у вас живёт, я его вычистил первым делом и написал всё своё), а у меня это выглядит примерно так:

Код
main     = env.Alias(ProjectName, ExeDir + '/' + ProjectName + '.' + DbgExt)


Это цель типа целевого файла - продукт сборки. Таких файлов может быть пачка (у меня их пять штук - главный (он показан), вспомогательные всякие (загрузчики, программаторы, хексы)

Код
clean_all = env.Alias('cln',      action = clean)
ld_prg    = env.Alias('load_prg', action = load_program)
prg_flash = env.Alias('prg',      action = program_flash)
vrf_flash = env.Alias('vrf',      action = verify_flash)
ic        = env.Alias('ic',       action = check_scmRTOS_cfg)


Это пример целей, который не целевые файлы, а функции, т.е. когда надо что-то сделать, выполнить действия. Аналог Phony targets у make.

Цели можно объединять в списки, чтобы сразу делать пакетную сборку.

Код
all = [main, rtinit, init, ldr, ic]


Ну, и финальные цели похожи на это:

Код
#-------------------------------------------------------------------------------
#
#    Final targets
#
env.Alias('all', all)
env.Alias('rebuild', [clean_all, all])
env.Alias('load',    [main, init, ic, ld_prg])
env.Alias('flash',   [all, fprg_drv, prg_flash])
env.Alias('verify',  [all, fprg_drv, vrf_flash])

env.AlwaysBuild('all', 'cln', 'load', 'load_prg', 'flash', 'prg', 'vrf', 'ic')

Вот эти имена, которые в финальных целях обозначены, и используются при задании цели при вызове скрипта. Например,

scons - собирается цель по умолчанию - all
scons rebuild - сперва чистятся продукты генерации, потом всё заново пересобирается.

С остальными целями ровно так же. Удобно то, что всё автоматизировано. Например, если сказать scons load (загрузить в проц новую программу), то сперва соберутся все нужные для этого процесса файлы, потом будет произведена загрузка.
MrYuran
Что-то лыжи пока не едут...
Цитата
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2 -mmcu=msp430x149
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
scons: *** [main\main.obj] Error 1

Самое интересное, ошибки синтаксиса распознаются.
Ведь компилятор же их распознает, не сконс?

Цитата
c:/mspgcc_new/bin/msp430-gcc /Fomain\main.obj /c main\main.c -O2 -mmcu=msp430x149
main\main.c: In function 'main':
main\main.c(15):13: error: expected ';' before numeric constant
msp430-gcc: /Fomain\main.obj: No such file or directory
msp430-gcc: /c: No such file or directory
scons: *** [main\main.obj] Error 1
dxp
Цитата(MrYuran @ 27.3.2012, 17:58) *
Самое интересное, ошибки синтаксиса распознаются.
Ведь компилятор же их распознает, не сконс?

Значит, сконс передаёт компилятору команду. Надо посмотреть, что именно он передаёт. Я не знаю, как у вас сделано, у меня билдеры самописные, я в таких случаях просто вывожу на печать строку и смотрю, что там передаётся, после этого, как правило, сразу видно, где косяк. Выглядит это примерно так (это функция-билдер cpp файлов, для с и асма есть аналогичные; первый фрагмент кода - это украшательство, оно рисует строку из '*', чтобы отделить список компиляции от других действий, в данном случае на это можно не смотреть):
Код
#-------------------------------------------------------------------------------
#
#    Action functions
#
def compile_cpp(target, source, env):
    #------------------------------------------------
    #
    #   Check if the first source is compiling
    #
    if env['FIRST_ENTRY'] == False:
        env['FIRST_ENTRY'] = True
        print '*'*60

    #------------------------------------------------
    #
    #   Launch compiler
    #
    print 'Compile:  ' + str(source[0])
    cmd = env['CC'] + env['CFLAGS'] + ' -o' + str(target[0]) + ' ' + str(source[0])
    # print cmd # <----------- эту строку раскомментирую и смотрю, что пошло на запуск тула
    p = subprocess.Popen(cmd, universal_newlines = True,
                         stdin  = subprocess.PIPE,
                         stdout = subprocess.PIPE,
                         stderr = subprocess.PIPE )

    out, err = p.communicate()
    if out: print out
    if err: print err

    return p.returncode
#-------------------------------------------------------------------------------

Если используете штатный env, то как там это вывести, не знаю. Я его сразу зануляю и пишу всё своё, получается полностью всё в моих руках и управляемо.
MrYuran
Цитата(dxp @ 20.2.2012, 13:15) *
Гораздо лучше тут сконс - это просто скрипт на питоне, вычислительный код пишется прямо по месту, синтаксис классический (а-ля матлаб), точность любая и широчайший набор средств. Эту же задачу можно универсально решать прямо в исходном коде с помощью COG. Это инструмент для автоматизированной кодогенерации, тут без разницы, одну (или пачку) константу объявить и проинициализировать или целую библиотеку фукнций. Способ универсальный, не зависит от языка и платформы (для каждого случая просто пишется свой код на питоне).

Попробовал Cog - куул!
Даже напейсал от радости статейко. Глядь, и пойдет идея в массы.

Кстати, по запросу "Cog" в гугле ловится нечто совсем другое.
_pasha
Понравилась идея упаковать таким образом файлы описания периферии МК.
И вообще - так можно реализовать вожделенную тройственность отображения (язык - блок-схема - UML)

Зы. Это надо перенести в тему "системы сборки"
ОК, перенес /MrYuran/
MrYuran
Кажися, я понял, чего со сконсом не так. Я неправильно понимал термин "зависимости".
А недавно попробовал ключик -MD в GCC и понял.
_pasha
случайно зацепился за waf и чегойто он показался мне гораздо прямее. Но по прежнему предпочтение отдаю расставлению галочек в визардах.
MrYuran
Цитата(_pasha @ 30.9.2013, 23:35) *
Но по прежнему предпочтение отдаю расставлению галочек в визардах.

Ну уж нет!
Чудес и без этого хватает.
orthodox
Цитата(MrYuran @ 23.4.2012, 6:54) *
Попробовал Cog - куул!
Даже напейсал от радости статейко.

А, кстати, как бы мне попасть на этот полезный ресурс?
Надо мне там как-то зарегиться, найти одного человечка,
что выдал в народ интересную программку, да заплатить ему как-то
за продолжение работ, если захочет заниматься ею дальше... В общем, мне туда надо,
но непонятен принцип регистрации...

А по поводу статейко: наш программист тоже использует возможности
автогенерации, только еще проще — написал чего-то нужное на VB5,
да оно и выдало готовый кусок кода, что надо вставить в асм-код.
Надо было как-то кучу таблиц наделать, для пересчета вместо формул,
для скорости — ну, вот так вот как-то и делал..
Ну, может Питон в чем-то лучше, не знаю.
MrYuran
Цитата(orthodox @ 1.10.2013, 23:02) *
А по поводу статейко: наш программист тоже использует возможности
автогенерации, только еще проще — написал чего-то нужное на VB5,
да оно и выдало готовый кусок кода, что надо вставить в асм-код.
Надо было как-то кучу таблиц наделать, для пересчета вместо формул,
для скорости — ну, вот так вот как-то и делал..
Ну, может Питон в чем-то лучше, не знаю.

Нюансы наступают, когда нудно через N лет чего-то где-то подправить, а самописных потрохов не найти уже никак.
Здесь же все непосредственно в коде, не потеряется.

Цитата
В общем, мне туда надо, но непонятен принцип регистрации...

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

Здесь приглашения. Либо перебирать наугад, либо почитать в теме, какие уже заняты.
А вообще, на форуме те же люди тусуются.
orthodox
Цитата(MrYuran @ 2.10.2013, 7:14) *
Нюансы наступают, когда нудно через N лет чего-то где-то подправить, а самописных потрохов не найти уже никак.
Здесь же все непосредственно в коде, не потеряется.


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

Здесь приглашения. Либо перебирать наугад, либо почитать в теме, какие уже заняты.
А вообще, на форуме те же люди тусуются.

Да откуда нюансы... Все, что относится к проекту — хранится хз сколько времени,
вон еще детские свои проекты храню до сих пор в подробностях, тогда еще компов
не было, так бумажные чертежи и схемы в папочках и платки на фотопленке в негативах...
Что до регистрации — это я попутал чуток. Это мне на хабр надо, оказывается.
А там на самом деле есть какие-то сложности, или же я тупой просто. Ну ладно, не горит, собственно...
MrYuran
Цитата(orthodox @ 2.10.2013, 9:48) *
Что до регистрации — это я попутал чуток. Это мне на хабр надо, оказывается.
А там на самом деле есть какие-то сложности, или же я тупой просто. Ну ладно, не горит, собственно...

На хабре я тоже ниасилил.
Да и меня там запинают быстро, программеры..

Цитата
Да откуда нюансы... Все, что относится к проекту — хранится хз сколько времени,
вон еще детские свои проекты храню до сих пор в подробностях, тогда еще компов
не было, так бумажные чертежи и схемы в папочках и платки на фотопленке в негативах...

Что сказать - могу только позавидовать.
Тут бывает, из нескольких рабочих версий актуальную приходится по полдня вычислять.
Начинаешь править - wtf?! я же это год назад исправлял..
Ещё один нюанс - иногда приносят обрывок бумажки - ну-ка, быстренько исправь то на это. А потом на меня же накатывают - вот ты нахрена это сделал?
Теперь я эти обрывки сканирую и подшиваю в папочку проекта с непосредственной ссылкой в тексте кода.
_pasha
Цитата(MrYuran @ 2.10.2013, 9:19) *
Что скаазать - могу только позавидовать.
Тут бывает, из нескольких рабочих версий актуальную приходится по полдня вычислять.
Начинаешь править - wtf?! я же это год назад исправлял..

Да уж. У меня тоже бардак со старыми поделками, с моторной темой еще как-то боролся, остальное оч. запущено. Последний фортель - плата/программа пульта для частотников болталась-болталась, в итоге оказалась в одном экземпляре на флешке, флешка наебнулась. А тут заказали. Пришлось переделывать :( Дня три убил.
?ELF
Цитата(orthodox @ 2.10.2013, 11:48) *
Это мне на хабр надо, оказывается.
А там на самом деле есть какие-то сложности, или же я тупой просто. Ну ладно, не горит, собственно...

На хабре зарегаться можно только по инвайту, который получить можно от тамошнего продвинутого аборигена.
Подробностей не знаю, т.к., у меня тоже там акка нет, но, скорее всего, чтобы оттуда приглашение кому-то новенькому отправить надо эту привилегию там каким-то образом заслужить.
Например, пару статей опубликовать, у которых рейтинг бешеный окажется или ещё что-то полезное сделать, что далеко непросто, с учётом обитающей там публики и очень мудрёной кармической системы.
orthodox
Цитата(?ELF @ 2.10.2013, 14:46) *
На хабре зарегаться можно только по инвайту, который получить можно от тамошнего продвинутого аборигена.
Подробностей не знаю, т.к., у меня тоже там акка нет, но, скорее всего, чтобы оттуда приглашение кому-то новенькому отправить надо эту привилегию там каким-то образом заслужить.
Например, пару статей опубликовать, у которых рейтинг бешеный окажется или ещё что-то полезное сделать, что далеко непросто, с учётом обитающей там публики и очень мудрёной кармической системы.

Да, это конечно все дает свои результаты, по видимому — так как Хабр есть ресурс популярный
и уважаемый, но это все одно по сути отбор, и, видимо, мы в эту выборку не попадаем.
Уверен, что потенциальному хабровчанину эти сложности покажутся вовсе не сложными,
и легко найдет инвайт. Что до мысли насчет предварительной публикации статей — мне это
представляется настолько же сомнительным, как открывание хитрого ящика, у которого инструкция
по открыванию его же находится внутри, и там же необходимые инструменты для открывания его же.
А мне там только найти бы того товарища, что написал программку
Enhanced Keyboard, и там ее опубликовал. Ник известен, а как на связь
выйти — х.з., даже побаиваюсь — вдруг там инопланетяне с продвинутым
разумом все, потому и закрыто вот так вот для регистрации...
Программка-то действительно "бомба", простому челу так просто и гениально
не написать...

Цитата(_pasha @ 2.10.2013, 8:43) *
Да уж. У меня тоже бардак со старыми поделками, с моторной темой еще как-то боролся, остальное оч. запущено. Последний фортель - плата/программа пульта для частотников болталась-болталась, в итоге оказалась в одном экземпляре на флешке, флешка наебнулась. А тут заказали. Пришлось переделывать :( Дня три убил.

Помогает дата везде где только можно, внутри файла особенно,
как только изменение сделал — так и меняешь дату в приметном месте файла,
в каментах там где-то...

Ну и лично я делаю изменения как бы пакетами,
от платы к плате к примеру, то есть от версии к версии.
Ну и этот пакет обычно накопительно описан в одном файле,
текстовом, который тоже имеет дату, как-то так примерно.

А вообще-то не только изменения надо описывать,
а и всю схему-программу, начиная с алгоритма, если там есть
чего оригинальное и продуманное. Потому что можно после на схему
смотреть, как баран, и не понимать, накойхер тут этот резистор, если
мысли по ходу разработки не документировались. Собственно, в основном
из-за этого я и стал учиться печатать быстро и не глядя, и теперь уже
освоился с этим делом настолько удобненько, что могу учить сам этой печати,
и имею свои наработки в этой теме... Все для удобства, для ленивых..

И, кстати, чтобы как бы не забыть, что делал и когда — даже примитивный
виндовский блокнотик может помочь, когда-то я и этим пользовался:

Цитата
Ведение журнала работы



Нередко при работе с текстом возникает необходимость фиксировать время и дату каждого сеанса редактирования файла, например, на случай, если позже вам потребуется восстановить хронологию внесения в документ каких-либо изменений.
Текстовый редактор Блокнот позволяет автоматически фиксировать каждое обращение к редактируемому файлу, сохраняя эту информацию в самом документе.
Для того чтобы включить функцию автоматического ведения журнала работы с файлом, в самой первой строке открытого или вновь созданного документа введите с клавиатуры параметр .LOG (обязательно с использованием заглавных букв и начальной точки).
В командном меню Файл (File) выберите пункт Сохранить (Save). Теперь при каждом открытии текстового файла на редактирование в его конец будут записываться текущие время и дата по часам компьютера.

Хотя можно, как говорилось выше, если в блокноте нажать кнопку F5, то прямо сразу вставится текущее время и дата :о)
?ELF
Насчёт личных архивов.
Мои пять копеек.
Потрындычу малёхо.

Всё бы ничего, если бы с возрастом свойства и качество памяти оставались прежними :(

Когда-то, ещё во времена DOS, выработал для себя методику хранения информации (конечно, давным-давно кем-то уже изобретённую), основанную на строгой иерархии каталогов с осмысленным названием и с именованием архивов и файлов по принципу YYYY-MM-DD_HH:mm:ss + короткое англ. название основной темы архива.
Нечто вроде "1992-03-12_173015_bbs_digest.lzh" (сейчас было бы).
Или, тогда, во времена DOS -- "920312bb.lzh"

В любом консольном файловом менеджере или в командной строке такие файлы очень красиво и логично выстраиваются.
В гуях, кстати, тоже.

Когда были дискеты и был очень молод -- вообще никаких проблем не было -- куда что закинул и как обозвал, в каком сейфе какую коробку с флопами искать.
Когда пошли CD-ROM, стало чуть сложнее справляться с объёмами, да и количество входящей информации увеличилось многократно, но тоже проблем не было.
Когда пошли DVD-ROM, стало ещё сложнее, но и тогда ещё более-менее справлялся, стал "прожигать" на дисках .info файл с деревом каталогов и их содержимым.
Хотя, уже стал забывать в какую сумку какой DVD-юк запихнул и по какому принципу, и DVD-юк ли это был, а не CD-юк?
И куда, на какую полку ту требуемую сумчару пристроил?

А вот когда пошли Portable-HDD... и когда к двум домашним стационарным системникам и ноуту, да трём личным станциям в конторе (с ёмкими дисковыми массивами) добавились ещё три ноута... да масса флэшек... да кучки microSD карточек... -- вот тут-то и объявился сложный вопрос синхронизации + "память стала не та" --> возраст + курение + неумеренное_питиЕ_с_друзьями_в_компаниях...

Надысь, скан диплома о вышке понадобился (на очередную учёбу собираюсь), помню, что где-то есть архив, в котором сканы всех моих документов-удостоверений и пр., в различных форматах (.pdf, .jpg), в цвете и ч/б.
В общем, "подготовленные бумаги", как раз на различные случаи кому-то переслать/предьявить или распечатать на лазернике.
Частично помню название фолдера, в котором лежит архив, частично помню имя и формат архива.
Не помню куда забросил... laughter2.gif

Проверил, по интуиции, тройку наиболее вероятных HDD-portable, пару-тройку наиболее вероятных флэшек.
Просканировал свой текущий конторский архив (в котором хранится почти всё, с 2002 года) по маске *2008*our_do*.*
Не поленился, залез в давно забытый жутко-ГОСТ-шифрованный Jetico BestCrypt контейнер на виртуалке.
Результат нулевой.
Архив не находится.
На сидюках-дивидюках искать уже было влом, тем более, мне их и сунуть-то сегодня, можно сказать, некуда -- usb-шные приводы только в конторе держу, на всякий случай.
Возможно, что отсканил когда-то, заархивировал и оставил архив в ноуте, за которым тогда работал -- ни то на Mac-е, или на винде, но точно не в линухе.
Виртуальная та ось была или реально_железная? -- х.з. -- запросто мог тестировать работу сканера, допустим, в виртуальной Mac OS, а позже .vmdk файл с той экспериментальной осью удалить.
Не помню...

В итоге, пришлось отбросить лень, достать сканер, диплом и заново отсканировать одну страничку. biggrin.gif
Бумага оказалась надёжнее... даже надёжнее собственной памяти, на которую никогда не жаловался, особенно на визуальную.

"Облака" выручили бы частично и выручают многих, но это не мой путь и не для меня.
Стрёмно как-то своё нижнее бельё в облаках развешивать.
Изначально не хотелось связываться со всякими амазонами и прочими гугло-драйвами.
Хер с ним, буду и дальше колоться и продолжать жрать свой кактус.

---
Когда-то задумался, сколько же люди оставляют после себя следов... если даже одиночный хард гарантированно можно убить только высокой температурой или разрубанием пополам.
AlexKlm
Цитата(MrYuran @ 23.4.2012, 7:54) *
Попробовал Cog - куул!
Даже напейсал от радости статейко. Глядь, и пойдет идея в массы.

Кстати, по запросу "Cog" в гугле ловится нечто совсем другое.


Вообще-то да, иногда это нужно. Я из лени не изучал питон, а генерирую скажем ту же таблицу в программе на Си, используя какую-либо готовую мной собранную программу для Windows, в тело которой вставляю задачу генерации необходимого .h файла.

Ещё известен мне пример из истории сборки GCC компилятора, что в процессе сборки генерируется не менее 7-ми различных утилит (исполняемых файлов) которые запускаются для генерации рутинного кода, чтобы его не надо было писать программисту. И только потом как всё будет сгенерировано, собирается сам компилятор.
Компилятор собирает сам себя, точнее - новую его версию.
_pasha
Первый раз наштрыкнулся на глюк.Вроде помню что было про это, что make дерутся.
Короче стоит ubuntu13.10x64
make 3.81
Если имя makefile - все работает
если Makefile - пишет no rule to make тратата
АЦЦТОЙ!!!
может в 4 пофиксено, хз.
_pasha
Scons is проджект оф зе манс. Итить калатить! clapping.gif
Этот ужоснах, за шо его так любят?!
_pasha
офф но питоновый
COG
оказуется, говно :(
потому что нужно чтоб собирал
фрагменты скрипта по всему тексту
а выдавал там где есть маркеры.
придется свой написать
или где-то есть более продвинутый вариант?
например, на суд общественности
  1. Читаем файл
  2. Собираем все строки, декларированные как скрипт
  3. Собираем входные переменные
  4. Определяем что куда выводить
  5. Запускаем скрипты
  6. генерим текст


это все можно делать 1001 способом, нам главное простота и читабельность.
на примере COG можем сделать такое
Код
/*@@script
#какой-то кусок текста на питоне
def fn():
return input.split('\n')
@@end
*/
--------------------------------
//@@once=Head

//@@end
/*
@@script
#another piece of script
sf=''
for x in Var1:
sf+='#include <{0}>\n'.format(x)
Head=sf
@@end
*/
/*
@@in=Var1
stdint
stddef
stdio
stdlib
ctype
time
@@end
*/

То есть режимы вывода
once сразу удаляется после запуска
replace замена содержимого между тегами @@replace @@end
append @@append @@end
Соответственно имеем теги для которых можно определить имена
@@script
@@end
@@input=<iden>
@@once=<iden>
@@replace=<iden>
@@append=<iden>

6 штук girl_crazy.gif

Видимость идентификаторов не зависит от позиции в файле
дальше. Строка содержащая тэг не обрабатывается на ввод или вывод.
потому шо в COG така фигня есть что для Си нужно делать
Код
/*]]]*/

/*[[[end]]]*/

т.к такого понятия как строка у него нету
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2020 IPS, Inc.