Как проверить, перезапустит ли Shake цель (фактически не пытаясь ее построить)?

В определенных ситуациях я хочу очень быстро узнать, актуален ли определенный целевой файл, т. Е. Будет ли сборка с использованием Shake выполнять какое-либо из правил, транзитивно вносящих вклад в достижение цели.

Какой лучший способ добиться этого с помощью встряхивания?

Мой вопрос в некоторой степени связан с Shake: сигнализируйте, нужно ли вообще что-то перестраивать. Однако я не хочу запускать саму сборку, потому что не хочу трогать ни один из моих сборочных продуктов.

1 ответ

В Shake какие файлы "грязные" определить немного сложно. Если интересующий вас файл зависит от каких-либо оракулов (даже транзитивных), то этот файл считается "грязным", поскольку оракулы всегда грязные. Однако, если Shake повторно запускает зависимые правила / оракулы и они не меняются, то в этот момент он снова считается чистым. В результате большинство правил считаются грязными до того, как что-либо выполнено, и только после выполнения некоторых правил оно становится чистым.

Я собрал билет, чтобы сделать что-то лучше. В одном варианте было бы задано целевое правило, которое бы указывало, какие листы зависят от него и являются ли они грязными, - в нем будут перечислены оракулы (которые, как вы разумно ожидаете, не изменится), и если в нем перечислены какие-либо исходные файлы, вы можете ожидать его перестроения.

(Я бы приветствовал предложения, если у кого-то есть хорошие идеи.)

Другие вопросы по тегам