2012-02-10 2 views
2

Я хочу написать Makefile, который читает файл list.txt и производит result.tar, содержащий содержимое. Если есть изменение в файле list.txt или в любом из файлов, на которые он указывает, тогда необходимо перестроить result.tar. Как я могу выразить это в Makefile? Ближайший я пришел это:Сделать с зависимостями из файла

result.tar : list.txt 
    cat list.txt | xargs tar -cf result.tar 

Но это не включает зависимость от содержания list.txt.

ответ

5

Я думаю, что должно быть что-то вроде этого:

 
result.tar : list.txt $(shell cat list.txt) 
    cat list.txt | xargs tar -cf result.tar 

Или немного лучше (добывающие list.txt к переменной и с помощью автоматических переменных):

 
LIST_FILE := list.txt 
result.tar : $(LIST_FILE) $(shell cat $(LIST_FILE)) 
    cat $< | xargs tar -cf [email protected] 
+1

Это сломается, если xargs вызывает деготь больше чем единожды. Каждый вызов перезаписывает файл tar. Просто удалите xargs, чтобы он работал правильно. –

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