1 (20.01.2021 08:39:53 отредактировано sunjob)

добрый день!

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

make all

makefile

all:   build
build: elf hex epp lss sym

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

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

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

+

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

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

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

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

но нужна в makefile

2 (20.01.2021 10:04:45 отредактировано gramozeka)

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

 Консоль:

paplay /usr/share/sounds/freedesktop/stereo/dialog-information.oga

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

цель: зависимости
[tab] команда
all:
    g++ main.cpp -o hello 
    paplay /usr/share/sounds/freedesktop/stereo/complete.oga

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

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

" si contuderis stultum in pila quasi tisanas feriente desuper pilo non auferetur ab eo stultitia eius " © Proverbs 27:22

3 (20.01.2021 14:31:33 отредактировано sunjob)

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

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

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

+

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

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

+

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

4 (20.01.2021 19:22:25 отредактировано gramozeka)

sunjob пишет:

и все они пересекаются, могут вызываться как отдельно, так и в куче

sunjob пишет:

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

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

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

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

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

" si contuderis stultum in pila quasi tisanas feriente desuper pilo non auferetur ab eo stultitia eius " © Proverbs 27:22

5 (21.01.2021 05:25:55 отредактировано sunjob)

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

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

...

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

+ открыть спойлер

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

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

надеюсь, у ВАС получиться!!!