Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: [GNU Make] Сделать какие-то действия, если make вернул ошибку
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
kurtis
Здравствуйте!

Есть такой makefile (основан на примерах из scmRTOS в ветке для avr-gcc)
Цитата
all: begin $(TRGPGM) dump printok

begin:
echo ======== Beginning of project "$(TRG)" processing ; $(CC) --version ;\
mkdir -p $(OBJDIR) $(EXEDIR) $(LSTDIR)
recode utf8..cp1251 $(TEXT_MESSAGE_DIRECTORY)/strings.cpp ........ (1)

printok: $(TRGELF)
echo ======== All OK, project size: ; $(ELFSIZE) $<
recode -f cp1251..utf8 $(TEXT_MESSAGE_DIRECTORY)/strings.cpp ........ (2)
Суть такая, есть файл strings.cpp где хранятся строки выводимые на экран ЖКИ (на кириллице). По умолчанию система сделана для вывода строк в кодировке CP1251, у меня же все исходники в кодировке unicode и дежать один файл в "неродной" кодировке мне не хочется, да и не очень это удобно. Для этого, я перед каждой сборкой, перекодирую файл в CP1251 (см. пункт "1"), а в конце обратно перегоняю в удобную для меня кодировку (пункт "2"). Но есть небольшая проблема - если при работе Make возвращает ошибку, то тогда файл не будет обратно преобразован в unicode.

Можно ли как-то средствами утилиты GNU Make "перехватить" ошибку и сделать какие-то действия (выполнить пункт "2")?

Спасибо за внимание! rolleyes.gif
DRUID3
Насчет "перехватить ошибку" не совсем понял зачем? Во время сборки из make все время обращаться к bash перекодируя туда-сюда этот файл каким-нить скриптом (ищем googl'ом) или встроив этот скрипт прямой в makefile. Добавляете еще одну зависимость и вперед - почва для творчества очерчена smile.gif ...
kurtis
Я может не правильно выразился.
Со скриптом то понятно что проще и быстрее будет. Я думал что может есть какие-то средства внутренние.

Проблема в том что если я собираю цель "all"
Код
all: begin $(TRGPGM) dump printok
то последовательно собирается сначала "begin", потом начинаются компилироваться исходники "$(TRGPGM)", и если здесь происходит ошибка, то Make вываливается в shell и возвращает ошибку. Т.е. до цели "prinkok" он не доходит.
Я думал что может есть способ, указать в makefile какую-то последовательность действий, вызываемую при не успешном выполнении какой-то части задания.
DRUID3
biggrin.gif Нужно хранить 2-а файла, один в CP1251 а другой в юникоде. При запуске make свежий в юникоде конвертить с заменой в CP1251. biggrin.gif
ReAl
Цитата(DRUID3 @ Oct 22 2009, 22:36) *
biggrin.gif Нужно хранить 2-а файла, один в CP1251 а другой в юникоде. При запуске make свежий в юникоде конвертить с заменой в CP1251. biggrin.gif

+1
Что-то в духе
Код
strings.cpp : strings.txt
         iconv -f UTF8 -t CP1251 $< >$@

и редактировать только strings.txt
andrew_b
Цитата(kurtis @ Oct 22 2009, 22:38) *
Я думал что может есть способ, указать в makefile какую-то последовательность действий, вызываемую при не успешном выполнении какой-то части задания.
Можно.

Код
all:
    -./not_found
    @[ $$? -eq 0 ] && echo Error!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.