LinuxForum.Fans
Тема

makefile и озвучка, в зов-ти от результата

Автор: sunjob 5 сообщений 963 просмотров
20.01.2021 06:05 · отредактировано #435847

добрый день!

нужно озвучить работу makefile, в зов-ти от успеха/ошибки
makefile - в общем-то стандартный (не без надстроек :о)
рассмотрим, самый простой случай

text

make all

makefile

text

all:   build
build: elf hex epp lss sym

elf: $(TARGET).elf hex: $(TARGET).hex eep: $(TARGET).eep lss: $(TARGET).lss sym: $(TARGET).sym

нужно, что-бы при успехе/ошибке, внутри makefile вызывались команды, соответственно:

text

${BEEP_OK}  # OK
${BEEP_ERR} # ERR  

+

text

slackware 12.2/14.2 x32/64
avr-gcc/xc8
bash

спасибо
p.s.
все с набегу пока мысля не влетела в голову...

так-то скриптами без проблем

text

make && ${BEEP_OK} || ${BEEP_ERR}

но нужна в makefile

20.01.2021 09:19 · отредактировано #435849

используй силу Люк!
aplay - alsa, paplay - pulseaudio. Файлик бипа подбери по вкусу из /usr/share/sounds/. Что-то типа:
[console]
paplay /usr/share/sounds/freedesktop/stereo/dialog-information.oga
[/console]

в самом makefile как-то так:

text

цель: зависимости
[tab] команда
text

all:
    g++ main.cpp -o hello 
    paplay /usr/share/sounds/freedesktop/stereo/complete.oga

http://linux.yaroslavl.ru/docs/prog/gnu_make_3-79_russian_manual.html , "Функции управления сборкой" http://linux.yaroslavl.ru/docs/prog/gnu_make_3-79_russian_manual.html#TOC84 можно запилить обработку ошибок..

Только это всё блажь какая-то, практический смысл отсутствует напрочь

20.01.2021 12:51 · отредактировано #435852

по поводу makefile, надо сделать "запуск" в одном месте (*), а целей в makefile более 10ка и все они пересекаются, могут вызываться как отдельно, так и в куче

(*) иначе смысл доработки теряется, если нужно будет принудительно рихтовать все цели, разбросанные по всему makefile
это исходя из того, что внешний запуск прост и локоничен

text
make && ${BEEP_OK} || ${BEEP_ERR}

+

со звуком я сам разберусь ... :о)

text

sox-14.3.2
+
${BEEP_OK}  # OK
${BEEP_ERR} # ERR  
команды шаблоны, сами команды не важны

+

про ссылки я в курсе, изучал их в свое время, ни чего подходящего там не нашел, а вы?! :о)

20.01.2021 19:19 · отредактировано #435854
"sunjob" написал:
и все они пересекаются, могут вызываться как отдельно, так и в куче
"sunjob" написал:
про ссылки я в курсе, изучал их в свое время, ни чего подходящего там не нашел

Шерлок Холмс любил Ватсона подкалывать логическими пируэтами, но тут не нужно быть Холмсом... ты или от скуки спциально стебёшься(к чему я более склоняюсь), либо ... второй вывод тянет на нарушение правил форума, поэтому тот, кто прочитает сам достроит конструкт.

Что там не понять? Используй что хочешь, хоть объявленные переменные, хоть абстрактные цели.

text

BEEP_OK := $(shell paplay /usr/share/sounds/freedesktop/stereo/complete.oga)
BEEP_ERR := $(shell paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga)

и вызывай где хочешь: ifeq ($(err),) ${BEEP_OK} else ${BEEP_ERR} endif

ау уж как и что в err описывать - читай доки сам, или монетами плати, а то ныне развелось умников...

вот тебе пример для второго варианта)))0

text

define BEEP_OK
paplay /usr/share/sounds/freedesktop/stereo/complete.oga
endef
define BEEP_ERR
paplay /usr/share/sounds/freedesktop/stereo/dialog-warning.oga
endef
# err = error # если эта строка закоментирована программа компилируется и прозвучит BEEP_OK, если раскоментировать то прозвучит BEEP_ERR
ifeq ($(err),)
all:
    g++ main.cpp -o hello
    ${BEEP_OK}
else
all:
    ${BEEP_ERR}
endif


При ссылке на упрощенно вычисляемую переменную делается простая подстановка ее значения (без каких-либо дополнительных вычислений).

Вот чуть более сложный пример, иллюстрирующей использование `:=' совместно с функцией shell. (Смотрите раздел Функция shell.) Этот пример также демонстрирует использование переменной MAKELEVEL, которая изменяется во время переходов "с уровня на уровень" при рекурсивном использовании make. Смотрите раздел Связь с make "нижнего уровня" через переменные.


ifeq (0,${MAKELEVEL})
cur-dir := $(shell pwd)
whoami := $(shell whoami)
host-type := $(shell arch)
MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}
endif
21.01.2021 05:22 · отредактировано #435870

1. цели разбросаны по всему makerfile (а он не маленький)
2. надо дорабатывать каждую существующую цель
3. написание новых целей будет "НЕСТАНДАРТНЫМ"
4. рекурсия не используется (по внутренним причинам)
за подказки, подзатыльники, ссылки и умные слова - огромная ВАМ БЛАГОДАРНОСТЬ!

с Новым Годом!

...

персонально, глубокоуважаемый, GramoZeka

Показать

если что-то "персонально" не нравиться - пишите в личку

соберите СЕБЯ в мужественную руку, постарайтесь держать СЕБЯ в рамках и более не высказываться в таком тоне,
пишите только по теме, а СВОИ "дОмысли и рОзмысли", пожалуйста, оставьте при СЕБЕе (к теме они не имеют отношения, а относятся только к ВАМ, ВАШЕМУ мировоззрению)

надеюсь, у ВАС получиться!!!
Войдите или зарегистрируйтесь, чтобы ответить.