Насколько устойчива марка? - PullRequest
1 голос
/ 30 декабря 2010

Насколько надежна утилита make?

Например, при «создании» чего-либо, если компьютер теряет питание и после следующего запуска компьютера возобновляется сборка, вывод гарантированно будет правильным (даже если файловая системане надёжнее)?Есть ли другие ситуации, в которых make может потерпеть неудачу?

Ответы [ 3 ]

4 голосов
/ 30 декабря 2010

Make выполняет запись в файловую систему во время работы.Поэтому, если он прерывается (например, если компьютер теряет питание или пользователь прекращает процесс) в середине этого процесса, неполные файлы могут быть записаны в файловую систему, если файловая система не имеет какого-либо механизма, предотвращающего это (ZFS).например).

GNU Make сама не определяет, является ли файл неполным или поврежденным.Пока он присутствует в файловой системе с отметкой времени, Make считает его завершенным.

2 голосов
/ 30 декабря 2010

По сути, нет.

Make пытается определить, является ли цель "актуальной" с помощью механизма, который может быть обманут при некоторых обстоятельствах, если файл назначения был частично записан. Частичные записи возможны в случае сбоя питания, и ОС может обновить временную метку, поэтому «make» может ошибиться.

Технически возможно, чтобы инструмент, используемый make (например, компилятор, компоновщик), был безопасным, используя атомарные операции и синхронизируя все на диске. Однако каждый инструмент должен быть безопасным, чтобы "make" был безопасным.

Также синхронизация всего сильно замедлит компиляцию, возможно.

0 голосов
/ 30 декабря 2010

GNU Make так же надежен, как и инструменты под ним. Если у цели есть текущая дата / время, Make сочтет ее завершенной, даже если она содержит только частичный вывод.

...