demiurg_spb 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Подскажите пожалуйста, как можно наиболее просто определить версию avr-libc в makefile, чтобы цеплять правильные библиотеки. Единственное место где я смог откопать версию - это файл version.h из самой avr-libc. В нём есть такая строчка: #define __AVR_LIBC_VERSION__ 20000UL Никаких более подобных предопределённых символов я нигде не нашёл. Парсить version.h не очень хочется, но если нет вариантов то буду... Смотрел либы при помощи objdump objdump -t libgcc.a Смотрел вывод компилятора на команду echo "" | avr-gcc -E -dM -x c - | sort | more - никаких зацепок. Кто-нибудь решал такую задачку? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Официально avr-libc user-manual Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Вы вопрос мой, видимо, не поняли. Всё что написано по Вашей ссылке мне прекрасно известно. Задача стоит следующая: как внутри makefile, (ещё до начала компиляции) узнать версию avr-libc, чтобы изменить правило сборки в зависимости от этой версии. Я нашёл лишь одно решение - парсить файл version.h (на который Вы тоже дали ссылку). Это не очень удобно. Я хочу получить совет, как это сделать максимально красиво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Задача стоит следующая: как внутри makefile, (ещё до начала компиляции) узнать версию avr-libc, чтобы изменить правило сборки в зависимости от этой версии. Не совсем понятен подход к делу - вместо указания конкретного варианта сборки проекта со всеми конкретными библиотеками, вдруг берется одна случайная версия библиотека и под нее все подгоняется :(. По мне так явно указать в make одну из возможных версий, при компиляции проверять и ругаться. Дальше или менять библиотеку, либо ключи в make под сборку с другой библиотекой. Не люблю неявного поведения :(. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Тут всё просто: avr-libc ранее не разделял таргеты вплоть до конкретной модели MCU. Теперь они переиграли структуру и стали использовать механизм спецификаций и теперь нужно линковаться с ключём -l$(MCU) Ранее без него всё собиралось. Чтобы учесть эту фичу нужен костыль в мейке. Ничего случайного тут нет. Просто поменялся API c версии avr-libc-2.0.0 (или даже чуть ранее - пока не выяснил). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 декабря, 2016 Опубликовано 5 декабря, 2016 · Жалоба Смотрел вывод компилятора на команду echo "" | avr-gcc -E -dM -x c - | sort | more - никаких зацепок. Может, что-то типа echo "#include <version.h>" | avr-gcc -E -dM... ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 декабря, 2016 Опубликовано 6 декабря, 2016 · Жалоба пробовал echo "#include <avr/io.h>" | avr-gcc -E -dM -mmcu=atmega8 - | sort | less echo "#include <avr/version.h>" | avr-gcc -E -dM -mmcu=atmega8 - | sort | less ни на что влияет наличие "#include <...>" О! Вот так работает!!! echo "" | avr-gcc -include "avr/io.h" -E -dM -mmcu=atmega8 - | sort | less Вот таким макаром можно узнать __AVR_LIBC_MAJOR__ echo "" | avr-gcc -include "avr/version.h" -E -dM - | grep __AVR_LIBC_MAJOR__ | gawk '{ print $3 }' - это то что мне нужно! Антоха, спасибо за наводку! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться