В чем разница между `stack clean` и удалением каталога`.stack-work`?
1 Контекст
Я участвую в проекте Haskell, который включает в себя множество C-бит и FFI. Поэтому я часто запускаю и перезапускаю команды вроде
$ stack build
$ stack build --force-dirty
$ stack clean
$ rm ./.stack-work
снова и снова, чтобы C-биты были правильно связаны с битами Haskell. Иными словами, иногда все работает только при запуске stack build
, а иногда и нет (в этом случае мне приходится циклически перебирать указанные выше команды, пока мой проект не будет правильно создан).
Это означает, что у меня нет правильного понимания того, как stack
(через ghc
) собирает C-биты перед сборкой бит Haskell. Итак, вот один из вопросов, которые помогут мне начать расстраивать мою путаницу:
2 Вопрос
Есть ли какая-либо заметная разница между запуском stack clean
и удалением содержимого каталога .stack-work
? Существуют ли случаи, когда удаление каталога .stack-work
необходимо в качестве хорошей меры предосторожности, чтобы убедиться, что вы на самом деле выполняете чистую сборку?
Ответы
Ответ 1
Как вы можете видеть, прочитав здесь источник:
https://github.com/commercialhaskell/stack/blob/master/src/Stack/Clean.hs
Есть два уровня, полный и неглубокий. Я считаю, что мелкий по умолчанию является дефолтом. Кажется, что он способен очищать определенные пакеты, или если вы вообще не предоставляете никаких параметров, он очистит все, кроме дополнительных файлов в локальных пакетах.