forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.UNIX.BSD

Ответ
 
Опции темы Опции просмотра
  #1  
Старый 14.08.2017, 07:30
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию Вопрос про Makefile

Victor Sudakov написал(а) к All в Aug 17 10:01:34 по местному времени:

Dear All,

Вот есть обычный Makefile

result.txt: source1.txt source2.txt
foo.awk < ${.ALLSRC} > ${.TARGET}

Какую строчку добавить, чтобы если result.txt нормально создался, то его надо раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt не нашёлся, то не раздавать?

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #2  
Старый 14.08.2017, 10:50
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию Re: Вопрос про Makefile

Alex Korchmar написал(а) к Victor Sudakov в Aug 17 09:30:14 по местному времени:

From: Alex Korchmar <noreply@linux.e-moe.ru>

Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote:

all: result.txt
rsync ....
result.txt: source1.txt source2.txt
foo.awk < ${.ALLSRC} > ${.TARGET}

VS> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо
VS> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он
VS> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt
VS> не нашёлся, то не раздавать?

> Alex

--- ifmail v.2.15dev5.4
Ответить с цитированием
  #3  
Старый 14.08.2017, 11:35
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию Вопрос про Makefile

Victor Sudakov написал(а) к Alex Korchmar в Aug 17 14:08:08 по местному времени:

Dear Alex,

14 Aug 17 09:30, Alex Korchmar wrote to me:
VS>> Какую строчку добавить, чтобы если result.txt нормально создался,
VS>> то его надо раздать по rsync/rdist/scp на несколько хостов, но
VS>> только в случае, если он успешно создался. А если к примеру
VS>> foo.awk отработал с ошибкой или source2.txt не нашёлся, то не
VS>> раздавать?


AK> all: result.txt
AK> rsync ....
AK> result.txt: source1.txt source2.txt
AK> foo.awk < ${.ALLSRC} > ${.TARGET}

В этом случае rsync будет выполняться при каждом запуске make, а мне нужно, чтобы только в том случае, если result.txt изменился.

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #4  
Старый 14.08.2017, 12:20
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: Вопрос про Makefile

Eugene Grosbein написал(а) к Victor Sudakov в Aug 17 14:59:52 по местному времени:

14 авг. 2017, понедельник, в 09:01 NOVT, Victor Sudakov написал(а):

VS> Вот есть обычный Makefile
VS> result.txt: source1.txt source2.txt
VS> foo.awk < ${.ALLSRC} > ${.TARGET}
VS> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо
VS> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он
VS> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt
VS> не нашёлся, то не раздавать?

result.txt: source1.txt source2.txt
foo.awk < ${.ALLSRC} > ${.TARGET} && rsync ...

Если source2.txt не нашелся, то весь конвейер и не будет запущен.

Eugene
--
Поэты - страшные люди. У них все святое.
--- slrn/1.0.2 (FreeBSD)
Ответить с цитированием
  #5  
Старый 14.08.2017, 12:20
Eugene Grosbein
Guest
 
Сообщений: n/a
По умолчанию Re: Вопрос про Makefile

Eugene Grosbein написал(а) к All в Aug 17 15:01:37 по местному времени:

14 авг. 2017, понедельник, в 14:59 NOVT, Eugene Grosbein написал(а):

VS>> Вот есть обычный Makefile
VS>> result.txt: source1.txt source2.txt
VS>> foo.awk < ${.ALLSRC} > ${.TARGET}
VS>> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо
VS>> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он
VS>> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt
VS>> не нашёлся, то не раздавать?

EG> result.txt: source1.txt source2.txt
EG> foo.awk < ${.ALLSRC} > ${.TARGET} && rsync ...
EG> Если source2.txt не нашелся, то весь конвейер и не будет запущен.

Или можно чуток красивее, но функционально эквивалентно:

result.txt: source1.txt source2.txt
foo.awk < ${.ALLSRC} > ${.TARGET}
rsync ...

То есть, следующей командой.

Eugene
--- slrn/1.0.2 (FreeBSD)
Ответить с цитированием
  #6  
Старый 14.08.2017, 13:20
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию Вопрос про Makefile

Victor Sudakov написал(а) к Eugene Grosbein в Aug 17 16:04:32 по местному времени:

Dear Eugene,

14 Aug 17 15:01, you wrote to All:
EG> Или можно чуток красивее, но функционально эквивалентно:

EG> result.txt: source1.txt source2.txt
EG> foo.awk < ${.ALLSRC} > ${.TARGET}
EG> rsync ...

EG> То есть, следующей командой.

Вот в таком варианте (следующей командой) как раз и не работает, в смысле "rsync ..." отрабатывает вне зависимости от успешного завершения foo.awk, из-за чего я и пошёл искать другие варианты.

А точно make при выполнении строчки "rsync ..." смотрит на код завершения предыдущей команды?

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #7  
Старый 14.08.2017, 13:50
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию Re: Вопрос про Makefile

Alex Korchmar написал(а) к Victor Sudakov в Aug 17 12:34:50 по местному времени:

From: Alex Korchmar <noreply@linux.e-moe.ru>

Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote:

VS> В этом случае rsync будет выполняться при каждом запуске make, а мне нужно,
нет, только если получился годный result.txt
(я бы предоставил рсинку самому разбираться, надо ли в этом случае
что-то синхронизировать, он для этого и придуман)

Потому что в предложенном Женей варианте с && есть один минус -
никак нельзя вручную заставить его отработать, если локальные
исходники не изменились, а вот обновить его на других хостах все
же захотелось.

> Alex

--- ifmail v.2.15dev5.4
Ответить с цитированием
  #8  
Старый 14.08.2017, 14:20
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию Вопрос про Makefile

Victor Sudakov написал(а) к Alex Korchmar в Aug 17 17:06:12 по местному времени:

Dear Alex,

14 Aug 17 12:34, Alex Korchmar wrote to me:

VS>> В этом случае rsync будет выполняться при каждом запуске make, а
VS>> мне нужно,
AK> нет, только если получился годный result.txt

А result.txt всегда есть (возможно что и устаревший, и завалявшийся с прошлого запуска make), вот только конструкции

all: result.txt
echo "rsync ..."

пофиг на то, что он устаревший. Разве что стирать result.txt каждый раз, но этого в условиях задачи не было.

Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
  #9  
Старый 14.08.2017, 16:10
Alex Korchmar
Guest
 
Сообщений: n/a
По умолчанию Re: Вопрос про Makefile

Alex Korchmar написал(а) к Victor Sudakov в Aug 17 14:45:24 по местному времени:

From: Alex Korchmar <noreply@linux.e-moe.ru>

Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote:

VS> А result.txt всегда есть (возможно что и устаревший, и завалявшийся с прошлого
VS> запуска make), вот только конструкции
VS> пофиг на то, что он устаревший.
нет, не пофиг, она сперва попытается его пересобрать.
То есть она может лишний раз запустить rsync, но не будет синкать
несуществующий или битый файл, или файл, более старый чем его исходник.

> Alex

--- ifmail v.2.15dev5.4
Ответить с цитированием
  #10  
Старый 14.08.2017, 19:40
Victor Sudakov
Guest
 
Сообщений: n/a
По умолчанию Вопрос про Makefile

Victor Sudakov написал(а) к Alex Korchmar в Aug 17 22:18:34 по местному времени:

Dear Alex,

14 Aug 17 14:45, Alex Korchmar wrote to me:

VS>> А result.txt всегда есть (возможно что и устаревший, и
VS>> завалявшийся с прошлого запуска make), вот только конструкции
VS>> пофиг на то, что он устаревший.
AK> нет, не пофиг, она сперва попытается его пересобрать.
AK> То есть она может лишний раз запустить rsync,

Вот именно.

AK> но не будет синкать
AK> несуществующий или битый файл, или файл, более старый чем его
AK> исходник.

Вот такая конструкция

all: result.txt
echo "rsync ..."

result.txt: src1.txt src2.txt
cat ${.ALLSRC} > ${.TARGET}

будет каждый раз дергать rsync, даже если src1.txt и src2.txt не менялись. А это не надо.

Так что придётся делать какую-то безобразную конструкцию через touch и флаг-файл.


Victor Sudakov, VAS4-RIPE, VAS47-RIPN
--- GoldED+/BSD 1.1.5-b20160322-b20160322
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 03:41. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot