2016-07-27 5 views
2

Я использую bash и пытаюсь использовать make-файл, чтобы скопировать все файлы в каталог с .ppt в .pdf, а затем добавить их все в архив. Это то, что я до сих порКак изменить все расширения файлов с помощью makefile

.PHONY: all clean 

files = $(wildcard *.ppt) 

OBJ = $(patsubst %.pdf, %.ppt, $(wildcard *.ppt)) 

clean: 
     rm -f lectures.tar.gz *.pdf 

Единственного Makefiles я сделал до этого момента был использован для компиляции программы из 1 или 2-х исходных файлов. Не знаете, как подойти к этому

+0

О да, и 'почему' вы хотите сделать это таким образом? Почему не традиционный сценарий оболочки? Удачи. – shellter

+0

@shellter Я уже создал сценарий оболочки, который работает. Это для домашней работы. Я должен создать сценарий оболочки и make-файл, которые делают то же самое, и я не знаю, что делать с Makefile –

ответ

3

Трюк с маркой заключается в том, что он начинается с конца, с тем, что вы хотите создать, а затем идет назад к началу, чтобы увидеть, что изменилось.

Итак, что в конце: что вы хотите произвести? На основе вашего примера мы сделаем вывод, что вы хотите создать сжатый файл tar с именем lectures.tar.gz. Итак, нам нужна цель для этого:

lectures.tar.gz: 

Что входит в файл tar? в PDF-файлы, которые вы уже обнаружили, как вычислить в переменную OBJ, поэтому эти вещи должны быть перечислены в качестве предпосылок lectures.tar.gz:

lectures.tar.gz: $(OBJ) 

Что рецепт для этой цели? Он должен создать файл tar с этим именем, содержащий все файлы. Один из способов заключается в следующем:

lectures.tar.gz: $(OBJ) 
     tar czf lectures.tar.gz $(OBJ) 

Другой способ, более общий характер использования automatic variables, будет:

lectures.tar.gz: $(OBJ) 
     tar czf [email protected] $^ 

Теперь, как вы создаете OBJ файлы? Для каждого из них вам необходимо скопировать его из версии .ppt. Поскольку вы используете GNU make (о чем свидетельствует использование вами функций wildcard и т. Д.), Вы можете использовать для этого pattern rule; картина такова:

%.pdf : %.ppt 
     cp $< [email protected] 

Эта модель указывает, как создать файл X.pdf из любого файла X.ppt, с командой cp: в этом случае автоматические переменные $< и [email protected] необходимы, так как вы не знаете, имена. Это неявное правило, потому что имена явно не перечислены, но подразумеваются шаблоном.

Теперь как вы строите файлы .ppt? Вы этого не делаете, потому что это исходные файлы, так что все готово!

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

  • Нет связанных вопросов^_^