Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как устроен makefile для WINAVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Alex_D
Начал изучать С++ с применением WINAVR по книге Шпака Программирование на языке Си для AVR и PIC (СD диска у меня нет) при первом же компилировании получил сообщение об ошибке

make.exe: *** No rule to make target `obj/main.o', needed by `sos.elf'. Stop.
> Process Exit Code: 2
> Time Taken: 00:01

Думаю что ,что то не так в makefile. Я взял этот файл с какогото примера похожего и задал 3 параметра
как описано в книге но не тут то было. В книге Шпака есть несколько слов на эту тему но для файла
makefile приведенного на прилагаемом CD. Кто укажет где описан этот файл. Как с ним бороться?
zltigo
Make он штука не зависимая от компилятора по определению :-)
Посему читать любую литеретуру по make - базовый набор у них одинаковый - на первых порах хватит. Потом что-нибудь типа
http://www.linux.org.ru/books/GNU/Gmake.htm
почитать.
Alex_D
Ну а как с ошибочкой быть. Как ее пройти?
Shurmas
make подробно описан в доке WinAVR
Alex_D
Хорошо хоть направление дали. Там же десяток 300 страничных доков. В каком хоть?
Или прочесть все?
Shurmas
MFile - в меню запуска.
zltigo
Цитата(Alex_D @ Sep 25 2006, 18:49) *
Ну а как с ошибочкой быть. Как ее пройти?

Сделать то, что просят - указать от каких файлов зависит main.o и как он создается из этих файлов.
Alex_D
Цитата(zltigo @ Sep 25 2006, 20:49) *
Цитата(Alex_D @ Sep 25 2006, 18:49) *

Ну а как с ошибочкой быть. Как ее пройти?

Сделать то, что просят - указать от каких файлов зависит main.o и как он создается из этих файлов.

Просмотрел ввесь makefile упоминания о main.o нет. C каких файлов он должен состоять?Нелья ли быть немного снисходительным для learning beginner С++ AVR till morning today.
zltigo
Цитата(Alex_D @ Sep 25 2006, 21:38) *
Нелья ли быть немного снисходительным для...

Тогда начните с изучения понятий исходные тексты -> компилятор -> объектный код -> линковка ->
исполняемый код.
До этого говорить о makefile в котором описываются правила создания исполняемого кода из исходных текстов преждевременно.
Alex_D
Ну и это называется помощь? Я имею понятие о том что вы пишете больше чемь надо для начинающегою. Но я думаю что makefile достаточно протокольная вещь которую просто нужно знать как откоректировать под свои задачи. Я же учусь и выполняю то что написанов книге.
Мне важно чтобы программа из одной команды выполнялась до конца правильно без ошибок.
А потом наполнить ее содержанием и усложнить это уже совсем друга задача. Сначала нужно получить инструмент в руки. А Вы устраиваете цирк, вместо того чтобы написать пару слов.
zltigo
Цитата(Alex_D @ Sep 25 2006, 22:33) *
А Вы устраиваете цирк, вместо того чтобы написать пару слов.

Очень странное представление о цирке.
Пару слов написал, полагаю более чем достаточных для придания нужного направления. Про make - придется читать. Если "без понятия" какие действия надо выполнить - сначала разбираться с инструментом. Уровень Ваших знаний мне не ведом, но если бы действительно
Цитата
Я имею понятие о том что вы пишете больше чемь надо для начинающегою

то вопроса:
Цитата
..упоминания о main.o нет. C каких файлов он должен состоять?

Просто не могло-бы быть.
Makefile и все, что с ним связано - это правильный путь который _придется_ пройти. На этом пути начальная планка достаточно высока :-(. И объяснения НИКАК не укладываются в "пару слов" -
придется читать и думать, думать, и еще раз думать, дабы ПОНЯТЬ придется. Ссылки давалиcь.

Альтернатива "правильному" пользоваться разными мутными визардами с галочками и кнопочками -
получить что-то "работающее" без особого труда можно.

Выбирайте.
Nanobyte
Недавно также пришлось осваивать WinAVR. Ошибки были не такие, как у Вас, но почти все вылечились принудительным прописыванием путей в Autoexec и Config. Попробуйте сначала открыть какой-нибудь проект из примеров в самом WinAVR и скомпилировать его. Если получится - тогда уже копать дальше makefile. В пакет WinAVR входит также генератор/редактор этих файлов. Можно создать makefile и самому. В Вашем случае, похоже, компилятор не находит файлы. Пробуйте по всякому - обязательно получится.
А содержимое диска к этой книге - вот:
Нажмите для просмотра прикрепленного файла
Tiro
Ловите руководство по GNU Make в переводе Владимира Игнатова и его статью "Эффективное использование GNU Make".

К сожалению ссылка на его страничку устарела, а новой ссылки у меня нет. Поэтому выкладываю файлами.

Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла

С уважением.
Alex_D
Цитата(Nanobyte @ Sep 25 2006, 22:50) *
Недавно также пришлось осваивать WinAVR. Ошибки были не такие, как у Вас, но почти все вылечились принудительным прописыванием путей в Autoexec и Config. Попробуйте сначала открыть какой-нибудь проект из примеров в самом WinAVR и скомпилировать его. Если получится - тогда уже копать дальше makefile. В пакет WinAVR входит также генератор/редактор этих файлов. Можно создать makefile и самому. В Вашем случае, похоже, компилятор не находит файлы. Пробуйте по всякому - обязательно получится.
А содержимое диска к этой книге - вот:
Нажмите для просмотра прикрепленного файла

Спасибо за теплое словою. Похоже что компилятор не видит исходника. Подставлял исходник и make
в сам WINAVR в папку samples -ошибка таже. Но у меня действительно Autoexec пустой.
XP ставилась на голый винт. Попробую прописать пути - правда уже подзабыл как это делать.
А что нужно в CONFIG?
Nanobyte
Цитата(Alex_D @ Sep 26 2006, 00:42) *
Но у меня действительно Autoexec пустой.
XP ставилась на голый винт. Попробую прописать пути - правда уже подзабыл как это делать.
А что нужно в CONFIG?

Прошу прощения, я ошибся. В Config прописывать ничего не нужно. А в Autoexec при инсталляции, WinAVR сам пишет пути. Что-то вроде этого:

SET PATH=C:\WINAVR\UTILS\BIN;%PATH%
SET PATH=C:\WINAVR\BIN;%PATH%

Если не получится, выложите файлы, попробую их откомпилировать на рабочем WinAVR.
_Diman_
Посмотрите в WinAVR-user-manual пункт 2.3 PATH Environment Variable. Или панель управления-система-дополнительно-переменные среды. В переменную Path довавить C:\WINAVR\BIN;C:\WINAVR\UTILS\BIN
sseett
Возможно это поможет.
http://www.sapunoff.ru/1_top/mk/mk04.html
Удачи!
zltigo
Цитата(Alex_D @ Sep 25 2006, 23:42) *
Похоже что компилятор не видит исходника.

1. Сообщение не компилятора а make
2. Сообщение отностится не к исходнику а к отсутствию правила по которому создавать обьектный файл - о до наличия исходника из которого создавать дело вообще пока не дошло.
Alex_D
Цитата(_Diman_ @ Sep 26 2006, 00:28) *
Посмотрите в WinAVR-user-manual пункт 2.3 PATH Environment Variable. Или панель управления-система-дополнительно-переменные среды. В переменную Path довавить C:\WINAVR\BIN;C:\WINAVR\UTILS\BIN

При инстоляции WINAVR прописал выше упомянутое. В Autoexec тоже прописал пути как рекомендовано. Папку для рабочих проектов поместил в WINAVR. Результата нет.
Мало того компилирую родные проекты с папки SAMPELS происходит следующее.

Если сделать MakeALL не очищая папку то компиляция без ошибок.
> "make.exe" all
make.exe: Nothing to be done for `all'.
> Process Exit Code: 0
> Time Taken: 00:00

А еали
makeclean
> "make.exe" clean
rm -rf *.o demo.elf *.eps *.png *.pdf *.bak
rm -rf *.lst *.map *.hex *.bin *.srec
> Process Exit Code: 0
> Time Taken: 00:01

a потом makeall то результат следующий
> "make.exe" all
avr-gcc -g -Wall -O2 -mmcu=atmega8 -c -o demo.o demo.c
avr-gcc -g -Wall -O2 -mmcu=atmega8 -Wl,-Map,demo.map -o demo.elf demo.o
avr-objdump -h -S demo.elf > demo.lst
avr-objcopy -j .text -j .data -O ihex demo.elf demo.hex
avr-objcopy -j .text -j .data -O binary demo.elf demo.bin
avr-objcopy -j .text -j .data -O srec demo.elf demo.srec
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O ihex demo.elf demo_eeprom.hex
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O binary demo.elf demo_eeprom.bin
avr-objcopy -j .eeprom --change-section-lma .eeprom=0 -O srec demo.elf demo_eeprom.srec

> Process Exit Code: 0
> Time Taken: 00:02

Компилятр что видит присуствие всех файлов и говорит что ему делать нечего?
Он их не переписывакт при makeall ?
zltigo
Цитата(Alex_D @ Sep 26 2006, 09:50) *
Мало того компилирую родные проекты с папки SAMPELS происходит следующее.

Все происходит абсолютно правильно.
1. make all - НИЧЕГО вообще не делает, поскольку все уже сделано и ничего не менялось
Обращаю внимание, что 'all' и 'clean' это есть просто имена наборов действий описанных в makefile а отнюдь не какие-то встроенные ключи make, посему о правильности поведения при их задании судить можно только по тому КАК они описаны в конкретном makefile. В какой-то мере эти имена общеприняты и в общепринятом применении они выполняют разумные действия.
2. make clean - удалил указанные в makefile выходные файлы
3. make all - сделал все, что было описано в makefile для создания выходных файлов.

0. Ну почитайте наконец-то документацию.
Alex_D
Ошибка найдена!
Почемуто mfile при создании пути к исходному файлу прописывал в makefile только хвост пути
.../path/name.c
вручную ввел путь начиная от С: и все поехало. Для меня это странно.
Спасибо всем!
dimka76
Лучше поставь AVRStudio 4.12 (www.atmel.com). Там есть возможность создавать проекты , компилировать и отлаживать на С/С++, при условии, если у тебя установлен WinAVR. И тогда не придется мучиться со всякими там makefile. Удачи !
ksv198
Цитата(Alex_D @ Sep 25 2006, 19:26) *
Начал изучать С++ с применением WINAVR по книге Шпака Программирование на языке Си для AVR и PIC (СD диска у меня нет) при первом же компилировании получил сообщение об ошибке

make.exe: *** No rule to make target `obj/main.o', needed by `sos.elf'. Stop.
> Process Exit Code: 2
> Time Taken: 00:01

Думаю что ,что то не так в makefile. Я взял этот файл с какогото примера похожего и задал 3 параметра
как описано в книге но не тут то было. В книге Шпака есть несколько слов на эту тему но для файла
makefile приведенного на прилагаемом CD. Кто укажет где описан этот файл. Как с ним бороться?

Если сделать makefile с помощью утилиты MFile входящей в состав WINAVR обычно все путем, кроме одного - по умолчанию там стоит CPPSRC = main.cpp, а ваш исходник судя по приведенному называется sos.с . Если написать ручками SRC =sos.с , а в CPPSRC =, то все будет в порядке.
SCMM
Некоторая хорошая информация о makefile для стартеров:
avr-gcc-abc-1
Gennadiy_
Почитал ветку, сходил по ссылке
http://www.sapunoff.ru/1_top/mk/mk04.html
беру пример кода из ссылки и по указанным шагам начинаю пробовать.

Получаю отлуп от Mfile при попытке указать в качестве исходника probe.c - я её так обозвал.
Руками правлю Make файл, настраиваю редактор, и... чудо, компиляция проходит без ошибок,
только на выходе получаю некий test...hex
Смотрю в Mfile, там галочка стоит при вводе пути источника, и указан test... снимаю галочку, делаю Make clean, проверяю пути к probe.c, получаю ошибку, код 2

читаю внимательно, нужно проверить переменную TARGET, прописываю переменную, но получаю тотже результат:

> "make" all
Makefile:398: *** target pattern contains no `%'. Stop.

> Process Exit Code: 2
> Time Taken: 00:01

ЧТО НЕ ТАК?


версия редактора2.0.6.1 , мануал 20060421
AVR_Amator
Есть целый урок по созданию makefile для начинающих на http://avr.h15.ru
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.