2015-04-30 2 views
0

У меня есть Makefile, который создает шейп-файл в качестве промежуточных шагов.Очистить промежуточные файлы, не указанные в Make

.INTERMEDIATE : senate_boundaries.shp 
senate_boundaries.shp : Senate\ shape\ files.zip 
    unzip -j "$<" 

Полный шейпфайл поставляется с более чем просто .shp, но и .prj файл, в .dbf файл, и кучу других. Эти файлы создаются, когда «Сенатская форма files.zip» распаковывается.

Эти другие файлы никогда не являются явной целью или зависимостью.

.INTERMEDIATE : senate_boundaries.prj senate_boundaries.dbf 

, похоже, ничего не делает.

Как я могу сообщить Make, чтобы очистить эти другие файлы?

+0

make ничего не знает о них (даже несмотря на то, что они маркируют их «ПРОМЕЖУТОЧНО»), поэтому я не уверен, что он должен удалить их из этого. Что генерирует файлы '.prj' и' .dbf'? –

+0

Они находятся в zip-файле. – fgregg

+0

Лучшее, что я думаю, что вы можете сделать, это использовать функцию правил шаблона, описанную в последнем абзаце [здесь] (http://www.gnu.org/software/make/manual/make.html#Pattern-Examples), а затем используйте что-то вроде 'senate_boundarie% .shp senate_boundarie% .prj senate_boundarie% .dbf: Senate \ shape \ files.zip', который должен был правильно обработать их. (Хотя вам действительно стоит подумать о том, чтобы избавиться от пробелов в имени файла zip, make * really * не очень хорошо работает с пробелами в именах файлов.) –

ответ

1

Вы можете добавить что-то вроде этого, чтобы ваш рецепт:

rm -f $(wildcard Senate\shape\*.prj) 

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

так что-то подобное может сделать трюк:

rm -f $(shell ls Senate\shape\ | grep -v .shp&) 

Другим вариантом является распаковать в папку темп, а затем скопировать файл, который вы хотите и удалить каталог темп.

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