LINUX.ORG.RU

Makefile: пересобрать цель, если один из файлов изменился

 , , ,


0

2

Есть такой мейкфайл:

RES = resources.xml

${RES:.xml=.c}: ${RES}
	glib-compile-resources ${RES} --target=$@ --generate-source
А resources.xml содержит:
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/my">
    <file compressed="true" preprocess="xml-stripblanks">a.ui</file>
    <file compressed="true" preprocess="xml-stripblanks">b.ui</file>
    <file compressed="true" preprocess="xml-stripblanks">c.ui</file>
  </gresource>
</gresources>
Проблема в том, что при изменениях в a.ui, b.ui и c.ui и запуске make, resources.c не пересобирается, так как изменений в resources.xml не было.
Хочу сделать так, чтобы resources.c генерировался заново при любых изменениях в a.ui, b.ui или c.ui.

Подошёл бы даже вариант типа такого (если бы он работал):
RES = resources.xml
UI = a.ui b.ui c.ui

${RES:.xml=.c}: ${RES} ${UI}
	glib-compile-resources ${RES} --target=$@ --generate-source

★★★★★
Ответ на: комментарий от kirk_johnson

Но это костыль, скорее всего. Должен быть встроенный способ.

kirk_johnson ★☆
()
Ответ на: комментарий от anonymous

Тьфу, не то скопировал. В общем, тач вызывай на *.ui, как ниже уже предложили.

anonymous
()
Ответ на: комментарий от kirk_johnson
RES = resources.xml
UI = $(shell sed -n 's/\s*<file.*>\(.*\)<\/file>/\1/p' ${RES})

${RES:.xml=.c}: ${RES}
	glib-compile-resources ${RES} --target=$@ --generate-source

${RES}: ${UI}
	@touch $@

Написал вот таким образом. Работает.

CYB3R ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.