Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Командная строка IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
RuslanBZ
Есть проект в IAR. Компилируется нормально. Создается файл HEX.
Как можно этот проект скомпилировать из командной строки?

Когда проект компилируется из оболочки создается файл .lst с содержанием
# 09/Oct/2008 18:21:56 #
# IAR Atmel AVR C/C++ Compiler V4.10A/W32, Evaluation Version #
# Copyright 1996-2005 IAR Systems. All rights reserved. #
# #
# Source file = T:\test\Pult_X-SAT_Mega88.c #
# Command line = --cpu=m48 -ms -o T:\test\Debug\Obj\ -lC #
# T:\test\Debug\List\ -lA T:\test\Debug\List\ #
# --initializers_in_flash -z9 --no_cse --no_inline #
# --no_code_motion --no_cross_call --no_clustering #
# --no_tbaa --debug -DENABLE_BIT_DEFINITIONS -e -I #
# "C:\Program Files\IAR Systems\Embedded Workbench #
# Evaluation version\avr\INC\" -I "C:\Program Files\IAR #
# Systems\Embedded Workbench Evaluation #
# version\avr\INC\CLIB\" --eeprom_size 256 #
# T:\test\Pult_X-SAT_Mega88.c #
# List file = T:\test\Debug\List\Pult_X-SAT_Mega88.lst #
# Object file = T:\test\Debug\Obj\Pult_X-SAT_Mega88.r90 #

Спасибо за ответы.
zltigo
Цитата(RuslanBZ @ Oct 10 2008, 12:21) *

Полагаю, что iarbuild устроит. Про него и читайте.
RuslanBZ
Цитата(zltigo @ Oct 10 2008, 13:32) *
Полагаю, что iarbuild устроит. Про него и читайте.


Устроит если заработает.
Пишет

C:\Program Files\IAR Systems\Embedded Workbench Evaluation version\common\bin>iarbuild.exe X:\test\Pult_X-SAT_Mega88.ewp -build -make

IAR Command Line Build Utility V4.4.1
Copyright 2002-2004 IAR Systems. All rights reserved.

ERROR, Configuration not found: Can not build configuration.

Можете дать пример какойто командной строки.
Спасибо
zltigo
Цитата(RuslanBZ @ Oct 10 2008, 15:17) *
Можете дать пример какойто командной строки.

Документацию читаем, да?
iarbuild.exe некий_проект.ewp -make название_конфигурации -log all
RuslanBZ
Извините что задаю глупые вопросы.
А что подразумевается под фразой название_конфигурации?
Сергей Борщ
Цитата(RuslanBZ @ Oct 10 2008, 16:50) *
А что подразумевается под фразой название_конфигурации?
Если вы откроете любой проект или создадите новый, то в нем будут две конфигурации - Debug и Release. Можно создавать свои, удалять эти...
helius
Цитата
C:\Program Files\IAR Systems\Embedded Workbench Evaluation version\common\bin>iarbuild.exe X:\test\Pult_X-SAT_Mega88.ewp -build -make

ERROR, Configuration not found: Can not build configuration.


Попробуй в качестве конфигурации указать Release или Debug - те что обычно создаются... я не знаю где они сохраняются в проекте, но тем неменее так работает (учитывай регистр!) laughing.gif

а вобще то минус в том, что при добавлении файлов или изменении опций компилера/линкера, все равно запускать IDE придется
xelax
А зачем iarbuld, использовать???

Можно прекрасно, компилировать исходники и линковать объектники и без создания иаровских проектов, воркспейсов и пр.

Компилятор есть, линкер есть, построитель библиотек (аж 2 штуки) есть...
Вам же даётся пример командной строки в lst файлах, собственно, что ещё нужно то 07.gif ????

И при добавлении, удалении файлов и прочих манипуляций иаровское IDE совсем не нужно.

Единственное, что может облегчить жизнь, так это скрипт файл с правилами сборки, для той IDE, которой вы пользуетесь.
zltigo
Цитата(xelax @ Dec 1 2008, 10:10) *
А зачем iarbuld, использовать???

Незачем, но вопрос начинался "Есть проект в IAR..."
Кроме того, почти наверняка могу предположить, что ничем, кроме этой самой IDE не пользуются sad.gif
helius
Цитата(xelax @ Dec 1 2008, 14:10) *
Единственное, что может облегчить жизнь, так это скрипт файл с правилами сборки, для той IDE, которой вы пользуетесь.


gnu make утилита облегчит всем нам жизнь как в winavr =))

но изучение документации компиллера - линкера на предмет ключей командной строки - занимет какое то время, кроме того, если не работал с компиллером год, а потом пытаешься по make понять что же ты хотел в target получить - опять рыть мануалы... (кайф ведь не в том, чтобы ключи ручками писать, а в гибкости!) smile.gif
хорошо бы иметь генератор make файла для каждого компиллера, эдакая гуевая связка, хоть и неспортивно конечно
xelax
Цитата(helius @ Dec 1 2008, 10:32) *
хорошо бы иметь генератор make файла для каждого компиллера, эдакая гуевая связка, хоть и неспортивно конечно


Угу, тоже уже такая идея крутится, по поводу GUI.
Да и пример есть более менее приемлемый. Конфигуратор eCos.


А изучать документацию на линкер и компилер всё равно надо, без этого никак.
zltigo
Цитата(helius @ Dec 1 2008, 10:32) *
но изучение документации компиллера - линкера на предмет ключей командной строки - занимет какое то время

Много-много меньшее, нежели копание по хрен как расположенным мнгогуровневым меню в какой-либо IDE. Окинул все почти одни взгядом. занеес в makefile и откомментировал (можно copy-paste smile.gif ). И после этого через год - тоже все, как на ладони.
Цитата
хорошо бы иметь генератор make файла для каждого компиллера, эдакая гуевая связка, хоть и неспортивно конечно

Нинафиг не нужно.
AnV22
Цитата
Много-много меньшее, нежели копание по хрен как расположенным мнгогуровневым меню в какой-либо IDE. Окинул все почти одни взгядом. занеес в makefile и откомментировал (можно copy-paste ). И после этого через год - тоже все, как на ладони.

А можно какой-нибудь примерчик такого makefile?
helius
Ни кто его вам не даст ) потому что редко кто идет таким путем...
А может быть коллективно создадим тут примерчик Makefile? С зависимостями, с коментариями, для AVR, ARM, может еще каких платформ...
только вот вопрос к гуру командной строки, а от версии к версии меняются ли ключи компилятора/линкера?
за одним с Make разберемся )) предлагаю использовать GNU make...

И так имеется дистрибутив iar_ewarm_440a который включает в себя:
Компилятор IAR ARM ANSI C/C++ Compiler V4.40A
Линкер IAR Universal Linker v4.60E/386
ну на первое время думаю хватит
Из пакета WinAvr берем утилиту GNU make 3.81

и... читаем мануалы ))))
zltigo
Цитата(helius @ Jan 12 2009, 11:27) *
потому что редко кто идет таким путем...

неужели smile.gif
Цитата
А может быть коллективно создадим тут примерчик Makefile? С зависимостями, с коментариями, для AVR, ARM, может еще каких платформ...

"Примерчиков" и документации для make немеряно. Платформа вообще никагого значения не имеет. Предлагаемую работу c целью осознания или каждый делает сам для себя, либо продолжает созерцать картинки и галочки, что меньшее зло, нежели без понятия использовать "образцы"....
MicroDiP
Вот как раз только закончил ковырять мануалы линковщика и компилятора. Правда под dsPIC. Делал для создания конфигурационного файла под UEStudio. Потратил 3 дня. За то какая сейчас прелесть работать и компилить в UEStudio yeah.gif Если поможет, могу кинуть сам конфиг.файл для UEStudio: сделал его с русскими комментариями, думаю разберёшься. Да и make-файл по уже выставленным настройкам проекта создать - секундное дело.
helius
2zltigo: образцы - зло, согласен, нужно разобраться, вот я и хочу это сделать, может быть кто то присоеденится
2МикроДИП: выложи )) с UEStudio я не знаком правда

вот пару интересных статей по make
http://www.citforum.ru/operating_systems/g...numake_03.shtml
http://www.linuxrsp.ru/docs/gm.html

вопрос №1 как автоматически генерировать зависимости файлов? как известно make это делает с пом. компилятора gcc, компилятор IAR же это делать не умеет (или я не знаю как )), а добавлять руками в Makefile имена исходников - не удобно...

если посмотреть в дирректорию .dep в которой лежат файлы зависимости, то можно увидеть несколько файлов с именами как у исходников, но с расширением *.o.d, каждый из которых содержит список файлов, от которых зависит данный *.obj (свой *.с + все подключенные хидеры)
наверное это можно сделать скриптом, но парсить исходники в наши задачи пока не входит)))
нужна утилита, результатом работы которой была бы дирректрия .dep с файлами нужного формата

вообще задача не сложная, решение должно быть!
MicroDiP
Цитата(helius @ Jan 12 2009, 23:43) *
вопрос №1 как автоматически генерировать зависимости файлов? как известно make это делает с пом. компилятора gcc, компилятор IAR же это делать не умеет (или я не знаю как )), а добавлять руками в Makefile имена исходников - не удобно...

Папку dsPIC IAR C_C++ вместе с файлом Application необходимо разместить в каталог configs той дирректории, в которую установлен UEStudio. После этого в настройках и установках компиляторов появится и этот компилятор.

По поводу зависимости файлов - это прописывается в настройках IDE. В том примере, что вы привели ссылку, это называется шаблонное правило. Не знаю точно, но думаю что в IDE самого иара эти зависимости прописаны жёстко, скорее всего в dll-ках (для каждого компилятора (читай каждого процессора) - свои расширения объектных файлов и, соответственно, свои зависимости), к которым уже обращается iarbuild.exe. Для внешней среды, если не используете иаровский билдер, то нужно прописывать их руками. В моём файле я эти зависимости прописывал.
zltigo
Цитата(helius @ Jan 12 2009, 18:43) *
..компилятор IAR же это делать не умеет

Умеет. И в том числе в make стиле.
Документацию почитайте.



Цитата(МикроДИП @ Jan 12 2009, 20:03) *
По поводу зависимости файлов - это прописывается в настройках IDE

Не sad.gif это Вы чего-то совсем не понимаете sad.gif. Например, при изменении header файла надо перекомпилировать все файлы куда он включен.

P.S.
А вообще, если к make не прикипели, то может быть обратите внимание на альтернативные типа http://www.scons.org
MicroDiP
Цитата(zltigo @ Jan 13 2009, 01:28) *
Не sad.gif это Вы чего-то совсем не понимаете sad.gif. Например, при изменении header файла надо перекомпилировать все файлы куда он включен.
P.S.
А вообще, если к make не прикипели, то может быть обратите внимание на альтернативные типа http://www.scons.org

Нет, это понятно. Я имею ввиду вот что: где прописывается в ИАРе, файлы с каким расширением должен выдать компилятор ? Эти файлы, в свою очередь, для кого являются входными файлами ? Какие файлы должен выдать на выходе линковщик ? И т.д. Вот сейчас прикручивал ИАР к UEStudio. Там всё это прописывается в конфиге. И на основании уже этих данных генерится make-файл и очерёдность выполнения тех или иных действий.
zltigo
Цитата(МикроДИП @ Jan 12 2009, 20:43) *
Нет, это понятно. Я имею ввиду вот что: где прописывается в ИАРе, файлы с каким расширением должен выдать компилятор ?

расширения по умолчанию не задаются, но полное имя можете, как и у любого другого компилятора указывать. Расширения по умолчанию описаны в документации.
Цитата
Эти файлы, в свою очередь, для кого являются входными файлами ?

Для кого прикажете в makefile для того и будут. Ничего не понял sad.gif
Цитата
Какие файлы должен выдать на выходе линковщик ?

какие прикажите ему (и типы, и имена, и расширения)такие и выдаст...
Цитата
Там всё это прописывается в конфиге. И на основании уже этих данных генерится make-файл и очерёдность выполнения тех или иных действий.

Обсуждать автоматические генераторы makefiles совсем нет желания.
helius
Цитата
Умеет. И в том числе в make стиле.
Документацию почитайте.

гм, хорошая новость, rtfm-лю )

наша задача не исползовать iarbuild, IDE и автогенерацию Makefile,
так как речь идет о компиляции проектов для встраиваемых систем, то мне кажется, что большую часть проектов можно описать в Makefile руками, есть конечно какие то сложные и специфичные проекты с сложной структурой и фичами, типа автогенерации исходников в процессе компиляции для которых используют, например, Cmake утилиту, но это уже другая ветка ))
helius
извиняюсь за темпы, много работы =)

действительно, все очень просто, IAR отлично задокументирован и вобще оставил хорошее впечатление своей поддержкой командной строки и даже имеет ключики не доступные из IDE ))) польза от них - другой разговор )))
И так, я сделал заготовку Makefile, в коментах все заинтересовавшие меня ключи компиллера,
make all:
создание директорий /list /Obj /Exe как в IAR было давно заведено
автопоиск всех исходных *.с, (пока в одной рабочей дирректории)
компилирование всех исходников в обьектники с авто-построением зависимостей (директория /.dep) файлов в стиле make
make clean:
вычищение директорий от листингов, обьектников, и зависимостей

что дальше 2DO:
компилирование ассемблерных файлов тоже
подключение директорий в которых лежат разные инкулюды (по стандартным и не очень путям)
линковка по указанному файлу *.xcl

выставляю на суд общественности, если кому интересно - гляньте пожалуйста, я make то учу только )))

Какой ужас! модераторы правда думают что кто то будет читать хелп к форуму на английском? ))) это нормально что по запросу Upload там ничего не нашлось? как файлы то вешать тут?! или только ftp? или у меня кармы не хватает? =))
zltigo
Цитата(helius @ Jan 13 2009, 22:06) *
и даже имеет ключики не доступные из IDE )))

Из IDE доступны абсолютно все ключики, разве только не через галочки.


Цитата(helius @ Jan 13 2009, 22:06) *
как файлы то вешать тут?!

Прямо при редактировании и вешать, правда форум сейчас в разбитом состоянии и говорят не у всех работает. Добавил "пустой" файл в Ваш пост.
helius
Цитата(zltigo @ Jan 14 2009, 01:42) *
Из IDE доступны абсолютно все ключики, разве только не через галочки.

"--no_wrap_diagnostics... This option is not available in the IAR Embedded Workbench IDE." стр 138, ARM® IAR C/C++ Compiler Reference Guide
я вот что имел ввиду

понятно, попробую завтра с работы )))
zltigo
Цитата(helius @ Jan 13 2009, 23:58) *
This option is not available in the IAR...

И генерация зависимостей недоступна и ... и .... и тем не менее все это можно указать в виде явных ключей в опциях. Нет только "галочек".
helius
асм компилится, папки поддерживаются ))
теперь интересный вопрос, касающийся линковки и линкера
что ему нужно кроме *.xcl файл + все наши обьектники? судя по листингу линкера, в командной строке он подключает
C:\Program Files\IAR Systems\Embedded Workbench 4.0 Evaluation\ARM\LIB\dl4tptinl8f.r79" какой то обьектник...
в хидере написано Customer-specific DLib configuration. таких файлов там всего то 84, как выбрать нужный я пока не знаю... ни какой связи к конкретным процессором я не нашел...
кроме того, где то должны линковаться файлы отвечающие за lowlevelinit, это какой нибудь asm startup - где инициализация железа + c startup где инициализация среды (памяти, вход в main)
helius
Навесить у меня так и не получается (Firefox 3.0.5) поэтому держите линк: http://files.mail.ru/9S3R2Q

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

# чего нет:
# не ищет зависимости асм файлов
# не поддерживает контроль файлов, когда они в /obj, - перекомпилирует каждый раз всё,
# поэтому пока генерит *.obj в рабочую директорию

# что есть:
# v1.2
# - поиск исходников (*.с, *.s79) в директориях перечисленных в переменной source_dirs
# - компиляция *.с, *.s79 в обьектники r.79 (ложатся в корень проекта)
# - автоматическая генерация зависимостей исходных файлов от хидеров *.h
# - передача ключей компилятору
# - цели all, clean
#
# v1.1
# - компиляция *.с исходников в *.obj все лежит в папке где Makefile
zltigo
Цитата(helius @ Jan 14 2009, 12:08) *
а вобще, желательно если бы кто то посмотрел - попробовал, чтоб появлялись вопросы и мы их тут обсуждали
иначе получится очередной шаблон...

Ну, наверное, только к выходным поближе sad.gif
IgorKossak
Цитата(helius @ Jan 14 2009, 11:08) *
# - компиляция *.с, *.s79 в обьектники r.79 (ложатся в корень проекта)

Ложатся не обязательно в корень. Иногда удобнее, когда ложатся в <Имя_конфигурации>\Obj.
helius
Цитата
Ложатся не обязательно в корень. Иногда удобнее, когда ложатся в <Имя_конфигурации>\Obj.

Согласен! конфигурации - позже ))) с начала охота дойти до бинарников ))
ну вот с дирректорией /obj пока не выходит, положить туда не вопрос! туплю как сделать так, чтобы make потом видел эти файлы там и не перекомпилировал исходники каждый раз, займусь позже...
Цитата
Ну, наверное, только к выходным поближе sad.gif

Не вопрос! )) вобще я жду коментов от людей желающих разобраться в вопросе командно-промтного билда ))
Но всегда буду рад любой критике! =))
helius
Всем Привет.
Прикрутил линкер, пока очень тупо - для отладки Makefile, все пашет, листинги, обьектники, *.hex генерится
Разбираюсь с осмысленным запуском линкера
И остаются красивости, типо работы с svn и прочее )))

линк на makefile http://files.mail.ru/MKJ36N
zltigo
Цитата(helius @ Jan 23 2009, 22:46) *
Всем Привет.



Ой! Неделя прошла... Совсем забыл посмотреть. И в эти выходные будет не до этого sad.gif
ochkarik_
Когда-то тоже интересовался этой темой, но бросил - не хватило терпения.

Для себя решил следующее:
Как правило, приходится работать с одним-двумя контроллерами, опции проекта зачастую похожи. Поэтому можно иметь пару-тройку шаблонных проектов, из которых и создавать новый (просто скопировав в нужную директорию, например, из репозитория).
Утилита iarbuild намного лучше меня разберется, как это скомпилить.
Самый главный напряг при работе с проектом - необходимость запуска IDE для добавления файлов. В то же время, для такой нечастой операции, как изменение, например, числа залоченных регистров, IDE имхо удобнее.
Пришлось искать компромисс. В кратце, принцип такой - при добавлении файлов в проект автоматически изменяется файл ewp (вырезается список включенных в проект файлов, генерится новый и заносится в проект).
У меня это делает sed. Если нужно менять опции - использую IDE.

Может, получилось криво и идеологически неправильно, но пока это работает, и меня устраивает.
HARMHARM
Цитата(helius @ Jan 14 2009, 13:03) *
Согласен! конфигурации - позже ))) с начала охота дойти до бинарников ))
ну вот с дирректорией /obj пока не выходит, положить туда не вопрос! туплю как сделать так, чтобы make потом видел эти файлы там и не перекомпилировал исходники каждый раз, займусь позже...

Не вопрос! )) вобще я жду коментов от людей желающих разобраться в вопросе командно-промтного билда ))
Но всегда буду рад любой критике! =))

Вот мой Makefile, есть поддержка obj/ и еще всякое. Может быть будет интересно. Впрочем, ужасно запутано.
P.S. Просмотрел Ваш труд, если всё упорядочить и слить может получиться очень красиво, и, главное, полезно smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.