Email or username:

Password:

Forgot your password?
iliazeus

Если в Makefile нужно правило, у которого заранее неизвестно количество "выходных файлов" - к примеру, распаковать архив, или скачать много файлов - то можно поставить ему в target директорию, где эти файлы будут находиться.

Но при этом нужно убедиться, что эта директория будет изменяться атомарно - потому что make, чтобы не пересобирать всегда все заново, ориентируется на время модификации (mtime), записанное в файловой системе, а для директории оно будет обновляться с каждым новым файлом. И поэтому, если сделать Ctrl-C и потом запустить make снова, mtime директории будет уже новее mtime исходного архива, и распаковка не запустится заново.

Самый простой способ этого добиться, который я нашел - это распаковывать сначала во временную директорию, а в конце делать атомарный `mv ${dir}.tmp ${dir}`.

#kb

1 comment
iliazeus

Конкретно с архивами есть еще подводный камень в том, что многие архиваторы сохраняют mtime при архивации, и потом при распаковке его восстанавливают. Поэтому, чтобы make не путался, по результатам распаковки может понадобиться еще пройтись командой touch - по крайней мере, по тем, которые будут указаны как зависимости у рецептов в Makefile.

#kb

Go Up