2012-01-03 5 views
2

У меня есть переменная со списком предварительных условий в разных каталогах, каждая из которых задается относительным путем. Например:Предварительные требования в сортированных каталогах

HTML_FILES := ../foo1/bar1.html ../foo1/bar2.html ../foo2/bar3.html foo3/bar4.html 

(. Обратите внимание, что эта переменная фактически генерируется, поэтому полный список папок не известны заранее)

Для каждого из них, я хочу, чтобы создать целевой файл текущий каталог, например bar1.xml, bar2.xml, bar3.xml, bar4.xml.

Как я могу написать правило, которое будет соответствовать этому? Это так близко, как я пришел. Кажется, что-то волшебное на месте ?????? может сделать трюк.

build: $(XML_FILES) 
$(XML_FILES): %.xml : ??????/%.html 
     perl $(HTML_TO_XML) $< 
+1

'HTML_FILES' - переменная, не так ли? Если это так, то кажется, что вы пропустили знак равенства: 'HTML_FILES: = ...' –

+0

Исправлено. Спасибо Эльдар. –

+0

Однако я уже ответил вам, что это переменная. –

ответ

5

vpath.

vpath %.html $(dir $(HTML_FILES)) 

Теперь можно использовать простое правило шаблона следующим образом:

$(XML_FILES): %.xml : %.html 
    perl $(HTML_TO_XML) $< 

Этого должно быть достаточно, чтобы получить вещи работать, но я не уверен, как он будет вести себя, если есть некоторые файлы с одинаковое имя в разных каталогах, например ../foo1/bar.html и ../foo2/bar.html.

+0

+1, и я думаю, что ваше предостережение чрезмерно: в этом случае вы не могли бы сделать две локальные версии 'bar.xml', поэтому задача была бы невозможна в любом случае. – Beta

+0

@ Бета, хммм, да, действительно. :-) –

+0

Спасибо! И в моем случае я могу предположить, что мы не будем сталкиваться с именами файлов, так что это отлично работает. –

Смежные вопросы