Системы сборки, таки Scons :) |
Здравствуйте, гость ( Вход | Регистрация )
Системы сборки, таки Scons :) |
Гость_MrYuran_* |
12.3.2012, 6:44
Сообщение
#1
|
Гости |
Попробовал запустить 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_* |
12.3.2012, 8:33
Сообщение
#2
|
Гости |
Ага, пошло!... по трубам...
Код 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) Кажися, начал понимать понемногу. Вот бы ещё доку концентрированную, а не эти размазанные в пространстве хтмлки... |
|
|
12.3.2012, 8:41
Сообщение
#3
|
|
тот самый Группа: Мод Сообщений: 13629 Регистрация: 24.11.2009 Из: Харьковская обл., UA Пользователь №: 25 |
А как обойти такую вещь:
Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. ЗЫ Вот где нужен что-то типа visual make! |
|
|
Гость_MrYuran_* |
12.3.2012, 9:08
Сообщение
#4
|
Гости |
А как обойти такую вещь: Хочу сабж исключительно на флешке, при установке сабака ругается на отсутствие стационарного питона - а он, шайтан, портабле, и тоже на флешке. Ну так установить его стационарно, а потом на флешку вместе с пытоном. Как я понял, он просто в папку Scripts добавляется. Там всех делов на полметра. |
|
|
12.3.2012, 9:42
Сообщение
#5
|
|
тот самый Группа: Мод Сообщений: 13629 Регистрация: 24.11.2009 Из: Харьковская обл., UA Пользователь №: 25 |
Ага. Но странно, в инсталляхе не догадались до того, чтобы указать питоноПутю иммедиатедли.
|
|
|
Гость_MrYuran_* |
12.3.2012, 10:29
Сообщение
#6
|
Гости |
Вчера ещё пробовал по наводке с элха Clang, впечатлило, хоть и не пошло.
Чувствуется, что торжественная монополия GNU на свободные средства разработки заканчивается. И это хорошо. |
|
|
12.3.2012, 10:52
Сообщение
#7
|
|
Adept Группа: Пользователи Сообщений: 522 Регистрация: 20.4.2011 Из: Novosibirsk Пользователь №: 346 |
Чессно сказать, дефолтный вариант сразу выкинул фтопку и написал полностью свой (не так там и много). Функционал automake мне не нужон, зато нада полную управляемость. Поэтому всё описал сам, начиная с конфигурационных переменных и заканчивая билдерами. Полёт отличный (уже лет пять, если не больше). О make вспоминаю, как страшном сне.
|
|
|
Гость_MrYuran_* |
12.3.2012, 10:57
Сообщение
#8
|
Гости |
Может, дока какая монолитная есть?
В виде pdf Особенно на API |
|
|
12.3.2012, 14:47
Сообщение
#9
|
|
Adept Группа: Пользователи Сообщений: 522 Регистрация: 20.4.2011 Из: Novosibirsk Пользователь №: 346 |
Может, дока какая монолитная есть? В виде pdf Особенно на API Когда изучал это дело, там была пара HTML'ей - один, типа, user's guide, второй вроде reference manual. По ним всё достаточно успешно изучалось. Этот же контент находился и в pdf'никах, но они мне показались менее удобными. А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы. |
|
|
Гость_MrYuran_* |
12.3.2012, 14:56
Сообщение
#10
|
Гости |
А вот тут это раззи не оно? Тут и одним файлом, и пачкой, и html'и, и postscript'ы, и pdf'ы. Ага, слона-то, как всегда, и не приметил Просто pdf удобнее оффлайн на планшетке изучать. Кстати, там у меня и питонодвижок стоит, осталось только GCC собрать под андроид От бумаги тоже отвык. Читая последний раз Пелевина с бумажного носителя, отметил, насколько удобнее 7" мобильный планшет. |
|
|
14.3.2012, 7:54
Сообщение
#11
|
|
тот самый Группа: Мод Сообщений: 13629 Регистрация: 24.11.2009 Из: Харьковская обл., UA Пользователь №: 25 |
Что-то я продолбоюбил.
Есть же обычный архив, нафига мне инсталлер.. Сегодня попробую, наконец-то |
|
|
Гость_MrYuran_* |
14.3.2012, 8:11
Сообщение
#12
|
Гости |
Сегодня попробую, наконец-то А я так уже. make all в настройках IDE заменил на scons Потихоньку допиливаю Sconstruct, который вполне на makefile становится похож, за исключением закорючек в описаниях целей Все зависимости находит сам, достаточно только центровой main обозначить. |
|
|
Гость_MrYuran_* |
16.3.2012, 14:13
Сообщение
#13
|
Гости |
dxp, а как указать сконсу разные цели сборки?
Типа release и debug? Идейка тут появилась, насчет экспресс-тестирования. Например, прилепляю сбоку рабочего проекта набор тестов testMain.c и компиляю Program('testMain.c'). Ничего лишнего, а зависимости само установит. Понятно, что есть специальные тестовые примочки, только надо все осваивать, а тут вроде все понятно и прозрачно. |
|
|
16.3.2012, 15:11
Сообщение
#14
|
|
Adept Группа: Пользователи Сообщений: 522 Регистрация: 20.4.2011 Из: Novosibirsk Пользователь №: 346 |
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_* |
27.3.2012, 13:58
Сообщение
#15
|
Гости |
Что-то лыжи пока не едут...
Цитата 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 |
|
|
28.3.2012, 4:31
Сообщение
#16
|
|
Adept Группа: Пользователи Сообщений: 522 Регистрация: 20.4.2011 Из: Novosibirsk Пользователь №: 346 |
Самое интересное, ошибки синтаксиса распознаются. Ведь компилятор же их распознает, не сконс? Значит, сконс передаёт компилятору команду. Надо посмотреть, что именно он передаёт. Я не знаю, как у вас сделано, у меня билдеры самописные, я в таких случаях просто вывожу на печать строку и смотрю, что там передаётся, после этого, как правило, сразу видно, где косяк. Выглядит это примерно так (это функция-билдер 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_* |
23.4.2012, 6:54
Сообщение
#17
|
Гости |
Гораздо лучше тут сконс - это просто скрипт на питоне, вычислительный код пишется прямо по месту, синтаксис классический (а-ля матлаб), точность любая и широчайший набор средств. Эту же задачу можно универсально решать прямо в исходном коде с помощью COG. Это инструмент для автоматизированной кодогенерации, тут без разницы, одну (или пачку) константу объявить и проинициализировать или целую библиотеку фукнций. Способ универсальный, не зависит от языка и платформы (для каждого случая просто пишется свой код на питоне). Попробовал Cog - куул! Даже напейсал от радости статейко. Глядь, и пойдет идея в массы. Кстати, по запросу "Cog" в гугле ловится нечто совсем другое. |
|
|
23.4.2012, 8:23
Сообщение
#18
|
|
тот самый Группа: Мод Сообщений: 13629 Регистрация: 24.11.2009 Из: Харьковская обл., UA Пользователь №: 25 |
Понравилась идея упаковать таким образом файлы описания периферии МК.
И вообще - так можно реализовать вожделенную тройственность отображения (язык - блок-схема - UML) Зы. Это надо перенести в тему "системы сборки" ОК, перенес /MrYuran/ |
|
|
Гость_MrYuran_* |
23.4.2012, 13:10
Сообщение
#19
|
Гости |
Кажися, я понял, чего со сконсом не так. Я неправильно понимал термин "зависимости".
А недавно попробовал ключик -MD в GCC и понял. |
|
|
30.9.2013, 21:35
Сообщение
#20
|
|
тот самый Группа: Мод Сообщений: 13629 Регистрация: 24.11.2009 Из: Харьковская обл., UA Пользователь №: 25 |
случайно зацепился за waf и чегойто он показался мне гораздо прямее. Но по прежнему предпочтение отдаю расставлению галочек в визардах.
|
|
|
Текстовая версия | Сейчас: 28.3.2024, 17:21 |